Cocos2D-X中針對CocosBuilder的解析器CCBReader


之前的一博客空間到期沒有備份,丟失了一些資料。以下僅僅通過搜素引擎找回的一些東東!

首先知道Cocos2D項目:

        在Cocos2D項目中加載ccb文件:在加載CocosBuilder的文件 前,CocosBuilder文檔或者ccb文件需要以一種壓縮的二進制各式發布——即ccbi文件。一旦被發布為ccbi文件,則只需要一行代碼即可簡 單地加載到具體的Cocos2D工程項目中(前提保證已經CCBReader.hCCBReader.m文件添加到項目中):

CCBReader *ccbReader = new cocos2d::extension::CCBReader(ccNodeLoaderLibrary);
CCNode *myNode = ccbReader->readNodeGraphFromFile("MyNodeGraph.ccbi");

Cocos2D-X項目中又是如何加載ccb文件?

Cocos2D-X中針對CocosBuilder的解析器CCBReader(位於extensions/CCBReader目錄下,且與CocosBuilder的版本有關系:CocosBuilder v2.1版本發布的文件,對於Cocos2D-X v2.1.1及低版本都不支持。因此無須再添加CCBReader.h和CCBReader.m這兩個iOS特有的文件。),由於C++沒有像Objective-C的動態特性,所以集成CCBReader的代碼並沒有如Cocos2D中的簡單。

CCBReader的原理
ccbi文件其實對應了4類Cocos2D-X對象,一個ccbi文件,包含了此對象的一些屬性信息。CCBReader讀取了這個 ccbi文件,就清楚了這個對象的一切。這個時候,要把這些信息和我們的代碼聯系起來,就需要用到CCNodeLoaderLibrary來聯系咱自定義 的類,接着把這個信息拋給CCBReader,由其進行關聯。具體代碼如下:

CCNodeLoaderLibrary  *ccNodeLoaderLibrary = CCNodeLoaderLibrary::newDefaultCCNodeLoaderLibrary();
ccNodeLoaderLibrary->registerCCNodeLoader("Intro", IntroLoader::loader());

/* Create an autorelease CCBReader */
cocos2d::extension::CCBReader  *ccbReader = new  cocos2d::extension::CCBReader(ccNodeLoaderLibrary);

/* Read a ccbi file. */
CCNode  *node = ccbReader->readNodeGraphFromFile("MainScene.ccbi");
ccbReader->release();

CCScene  *scene = CCScene::create();
scene->addChild(node);

默認情況下,ccbi對應了Cocos2D-X的4個類型之一,如果要對應咱自定義的類型(從那4個類型中派生出來的),我們要在CocosBuilder中的根對象命名,如下圖:

1364984313_1611選擇CCLayer,在右側的Custom class中填寫Intro。(如果是Custom class顯示為JS Controller,點擊菜單Document/JavaScript Controlled,去掉其選項)。這個就可以理解上面的代碼了:
CCNodeLoaderLibrary  *ccNodeLoaderLibrary = CCNodeLoaderLibrary::newDefaultCCNodeLoaderLibrary();
ccNodeLoaderLibrary->registerCCNodeLoader(“Intro”, IntroLoader::loader());

上述例子中,IntroLoader對象就負責加載相關的類Intro。

可知:CCBReader進行ccbi和自定義類的關聯的過程如下,CCBReader一邊解析ccbi文件,一邊調用自定義類的onResolveCCBCCMenuItemSelector等方法;在這些回調方法中,可以進行相關的綁定工作,如對象綁定、CCMenuItem  selector的綁定等。更多綁定細則,可以查看CocosBuilder中的幫助。

就是說,如果用Objective-C就比較方便,由於其動態性,可以根據名稱自動反射;而C++則需要手動綁定,繁瑣些,不過為了CocosBuilder帶來方便,這個也是值得的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM