程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 【cocos2d-x從c++到js】03:hybrid開發模式

【cocos2d-x從c++到js】03:hybrid開發模式

編輯:關於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的開源協議是MPL2.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.  
  8. CCScriptEngineProtocol *pEngine = ScriptingCore::getInstance(); 
  9. CCScriptEngineManager::sharedManager()->setScriptEngine(pEngine); 
  10. ScriptingCore::getInstance()->runScript("MoonWarriors-jsb.js"); 

ScriptCore是腳本的核心,他就是我們說的那個JS解釋器。cocos2d-x把spidermonkey的解釋器封裝了一下,以提供對cocos2d-x引擎的相關支持,並簡化相應的調用接口。

addRegisterCallback接口用於添加注冊函數,注冊函數用於在引擎執行時,綁定相應的代碼從JS往C++的映射代碼)。每一個注冊函數,對應一個庫。現在cocos2d-x提供了四個庫支持,分別是cocos2d-x核心庫,cocos2d-x擴展庫,cocosbuilder支持庫,clipmunk物理引擎庫。將來你可以在這裡添加注冊自己實現的JS綁定庫,來直接擴展這個JS引擎。

start啟動腳本引擎。

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

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

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

 

本文出自 “老G的小屋” 博客,請務必保留此出處http://4137613.blog.51cto.com/4127613/1120219

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved