首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

cocos2d-x 混合開發模式:SpiderMonkey 整合詳解

     編輯:關於C語言

因為蘋果不允許 App 下載可執行代碼,所以用動態連結庫構建外掛式引擎並透過網路下載在 iOS 上無法實現。但有一種方式是在引擎內部整合一個腳本解譯器,然後將腳本作為資源下載(腳本是加密的),以此繞過蘋果的審核條款。這種方式稱為 Hybrid(混合模式)。雖然這樣做無法做到完全不留痕跡,但深層原因在於 Hybrid 牽涉利益太大,蘋果也算睜一隻眼閉一隻眼。

在 cocos2d 引擎的諸多分支中,cocos2d-x 的開發以 C++ 為核心。cocos2d-x 引擎正是透過 Hybrid 方式來執行 JS 代碼。為了執行 JS 代碼,引擎本身需要一個腳本解譯器,引擎整合的腳本解譯器叫做:SpiderMonkey。

SpiderMonkey 是一個歷史悠久的基於 C/C++ 編寫的 JS 腳本解譯器,由 Mozilla 提供,知名的 Firefox 和 Thunderbird 都在使用。cocos2d-x 整合 SpiderMonkey 的開源協議是 MPL 2.0,沒有什麼限制,可以放心使用。

在 AppDelegate::applicationDidFinishLaunching() 函式中,可以找到啟動腳本引擎的代碼:

  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. CCScriptEngineProtocol *pEngine = ScriptingCore::getInstance();
  8. CCScriptEngineManager::sharedManager()->setScriptEngine(pEngine);
  9. ScriptingCore::getInstance()->runScript("MoonWarriors-jsb.js");

ScriptCore 是腳本的核心,也就是我們說的 JS 解譯器。cocos2d-x 將 SpiderMonkey 的解譯器進行了封裝,以提供對 cocos2d-x 引擎的相關支援,並簡化相應的呼叫介面。

addRegisterCallback 介面用於新增註冊函式,註冊函式用於在引擎執行時,綁定相應的代碼從 JS 往 C++ 的映射代碼。每一個註冊函式對應一個庫。目前 cocos2d-x 提供了四個庫支援,分別是 cocos2d-x 核心庫、cocos2d-x 擴充庫、CocosBuilder 支援庫、Chipmunk 物理引擎庫。未來你可以在這裡新增註冊自己實現的 JS 綁定庫,來直接擴充這個 JS 引擎。

start 啟動腳本引擎。

CCScriptEngineManager::sharedManager()->setScriptEngine 這句是將腳本引擎綁定到引擎管理器上,引擎管理器提供對腳本引擎的一個全域存取點,並負責對腳本引擎的卸載。

最後就是執行遊戲的主腳本了:ScriptingCore::getInstance()->runScript("MoonWarriors-jsb.js");

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved