溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

【cocos2d-x從c++到j(luò)s】03:hybrid開發(fā)模式

發(fā)布時間:2020-07-07 23:41:54 來源:網(wǎng)絡(luò) 閱讀:14241 作者:老G 欄目:游戲開發(fā)

因為蘋果是不允許app下載可執(zhí)行代碼的,所以用動態(tài)鏈接庫構(gòu)建插件式引擎并通過網(wǎng)絡(luò)下載在iOS上是無法實現(xiàn)的。但有一種方式是,在引擎內(nèi)部集成一個腳本解釋器,然后把腳本作為資源來下載(腳本是加密的),如此規(guī)避蘋果的審核條款。這個方式就叫Hybrid。但這么做沒法做到不露痕跡,深層原因應(yīng)該是,Hybrid牽扯利益太大,蘋果也算睜一只眼閉一只眼。

在cocos2d引擎的眾多分支中,cocos2d-x的開發(fā)是以C++為核心的。而cocos2d-x引擎,就是通過hybrid方式來執(zhí)行js代碼的。為了執(zhí)行js代碼,引擎本身需要一個腳本解釋器,引擎集成的腳本解釋器就叫:spidermonkey。

spidermonkey是一個歷史悠久的基于c/c++編寫的js腳本解釋器,由Mozilla提供,非常有名的firefox和thunderbird都在用。cocos2d-x集成spidermonkey的開源協(xié)議是MPL2.0,沒有什么限制,你可以放心使用它。

在AppDelegate::applicationDidFinishLaunching()函數(shù)中,我們可以找到啟動腳本引擎的代碼:

  1. ScriptingCore* sc = ScriptingCore::getInstance(); 
  2. sc->addRegisterCallback(register_all_cocos2dx); 
  3. sc->addRegisterCallback(register_cocos2dx_js_extensions); 
  4. sc->addRegisterCallback(register_CCBuilderReader); 
  5. sc->addRegisterCallback(jsb_register_chipmunk); 
  6. sc->start(); 
  7.  
  8. CCScriptEngineProtocol *pEngine = ScriptingCore::getInstance(); 
  9. CCScriptEngineManager::sharedManager()->setScriptEngine(pEngine); 
  10. ScriptingCore::getInstance()->runScript("MoonWarriors-jsb.js"); 

ScriptCore是腳本的核心,他就是我們說的那個JS解釋器。cocos2d-x把spidermonkey的解釋器封裝了一下,以提供對cocos2d-x引擎的相關(guān)支持,并簡化相應(yīng)的調(diào)用接口。

addRegisterCallback接口用于添加注冊函數(shù),注冊函數(shù)用于在引擎執(zhí)行時,綁定相應(yīng)的代碼(從JS往C++的映射代碼)。每一個注冊函數(shù),對應(yīng)一個庫?,F(xiàn)在cocos2d-x提供了四個庫支持,分別是cocos2d-x核心庫,cocos2d-x擴(kuò)展庫,cocosbuilder支持庫,clipmunk物理引擎庫。將來你可以在這里添加注冊自己實現(xiàn)的JS綁定庫,來直接擴(kuò)展這個JS引擎。

start啟動腳本引擎。

CCScriptEngineManager::sharedManager()->setScriptEngine 這句是將腳本引擎綁定到引擎管理器上,引擎管理器提供對腳本引擎的一個全局訪問點,并且也負(fù)責(zé)對腳本引擎的卸載。

最后就是運(yùn)行游戲的主腳本了。

ScriptingCore::getInstance()->runScript("MoonWarriors-jsb.js"); 

 

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI