在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ C/ hybrid 開發(fā)模式
cocos2d-x for js 中的繼承
JS 與 C++ 的交互 1——JS 代碼調(diào)用 C++ 代碼
迎接腳本時代的到來
解決在 vs 中修改 js 源文件無效
JS 腳本語言的優(yōu)勢與一些問題
注冊函數(shù)
回調(diào)函數(shù) 2
cxx-generator JS 綁定工具
使用 cocos2d-console 工具轉(zhuǎn)換腳本為字節(jié)碼
hybrid 開發(fā)模式
JS 與 C++ 的交互 2——JS 與 C++ 的“函數(shù)重載”問題
回調(diào)函數(shù)1——按鍵回調(diào)
Google 的繼承寫法解析
John Resiq 的繼承寫法解析
JS 與 C++ 的交互 3——C++ 和 JS 類型轉(zhuǎn)換
傀儡構造函數(shù)

hybrid 開發(fā)模式

因為蘋果是不允許 app 下載可執(zhí)行代碼的,所以用動態(tài)鏈接庫構建插件式引擎并通過網(wǎng)絡下載在 iOS 上是無法實現(xiàn)的。但有一種方式是,在引擎內(nèi)部集成一個腳本解釋器,然后把腳本作為資源來下載(腳本是加密的),如此規(guī)避蘋果的審核條款。這個方式就叫 Hybrid。但這么做沒法做到不露痕跡,深層原因應該是,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ù)中,我們可以找到啟動腳本引擎的代碼:

ScriptingCore* sc = ScriptingCore::getInstance(); 
sc->addRegisterCallback(register_all_cocos2dx); 
sc->addRegisterCallback(register_cocos2dx_js_extensions); 
sc->addRegisterCallback(register_CCBuilderReader); 
sc->addRegisterCallback(jsb_register_chipmunk); 
sc->start(); 

CCScriptEngineProtocol *pEngine = ScriptingCore::getInstance(); 
CCScriptEngineManager::sharedManager()->setScriptEngine(pEngine); 
ScriptingCore::getInstance()->runScript("MoonWarriors-jsb.js"); 

ScriptCore 是腳本的核心,他就是我們說的那個 JS 解釋器。cocos2d-x 把 spidermonkey 的解釋器封裝了一下,以提供對 cocos2d-x 引擎的相關支持,并簡化相應的調(diào)用接口。
addRegisterCallback 接口用于添加注冊函數(shù),注冊函數(shù)用于在引擎執(zhí)行時,綁定相應的代碼(從JS往C++的映射代碼)。每一個注冊函數(shù),對應一個庫?,F(xiàn)在 cocos2d-x 提供了四個庫支持,分別是 cocos2d-x 核心庫,cocos2d-x 擴展庫,cocosbuilder 支持庫,clipmunk 物理引擎庫。將來你可以在這里添加注冊自己實現(xiàn)的 JS 綁定庫,來直接擴展這個 JS 引擎。

start啟動腳本引擎

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

最后就是運行游戲的主腳本了。

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