zoukankan      html  css  js  c++  java
  • cocosBuilder生成cbbi文件,绑定到cocos2d-x

     

    cocosBuilder生成cbbi文件,绑定到cocos2d-x

    分类: Cocos2D-X 4651人阅读 评论(6) 收藏 举报


    今天弄了一天。记录一下。


    首先是版本号。

    我用的cocosBuilder 3 和 cocos2d-x 2.1.2。亲測cocosBuilder 2和最新版本号的cocos2d-x不兼容。

    报错为WARNING! Incompatible ccbi file version (file: 3 reader: 5)。升级到cocosBuilder 3,XCode与VS2012測试没问题。


    这套体系的原理是:首先用cocosBuilder编辑成它的文件XXX.ccb。然后要公布版文件为ccbi。

    在cocos2d体系中有CCBReader库,能够将ccbi文件里的信息解读成cocos2d-x可理解的格式。


    可是事情远没有想象的那么美好。就如鲜花总会插在牛粪上一样。

    ccbi文件读取到程序中的过程真是令人恶心。


    不抱怨。说正题:


    首先,要自己写个CCLayer的子类,还要分别继承CCBSelectorResolver和CCBMemberVariableAssigner。

    并实现这两个虚基类的接口。同一时候,还要写个CREATE_FUNC方法。在下一步中会用到。比如:

    1. class MyLayer:public CCLayer,public CCBSelectorResolver,public CCBMemberVariableAssigner{  
    2.       
    3. public:  
    4.     CREATE_FUNC(MyLayer);  
    5.     void enterPlay(CCObject *pSender);    
    6.     void pressTitle(CCObject *pSender, CCControlEvent pCCControlEvent);  
    7.   
    8.       
    9. public:  
    10.     //CCBSelectorResolver  
    11.     virtual SEL_MenuHandler onResolveCCBCCMenuItemSelector(CCObject * pTarget, const char* pSelectorName) ;  
    12.     virtual SEL_CCControlHandler onResolveCCBCCControlSelector(CCObject * pTarget, const char* pSelectorName) ;  
    13.       
    14.     //CCBMemberVariableAssigner  
    15.     virtual bool onAssignCCBMemberVariable(CCObject* pTarget, const char* pMemberVariableName, CCNode* pNode);  
    16.       
    17. };  
    然后对应每个Layer还要写一个Loder。Loader继承自CCLayerLoader。其须要做两件事。1、创建一个loader方法。2、将Loader与对应的Layer关联。

    比如:

    1. class MyLayerLoder :public CCLayerLoader{  
    2.       
    3.       
    4. public:  
    5.     CCB_STATIC_NEW_AUTORELEASE_OBJECT_METHOD(MyLayerLoder, loader);  
    6.       
    7.     CCB_VIRTUAL_NEW_AUTORELEASE_CREATECCNODE_METHOD(MyLayer);  
    8.       
    9. };  

    好了,如今完毕了定义。接下来是实现。

    在对应的注冊函数中注冊关联。

    使用CCB_SELECTORRESOLVER_CCMENUITEM_GLUE、 CCB_SELECTORRESOLVER_CCCONTROL_GLUE、 CCB_MEMBERVARIABLEASSIGNER_GLUE宏完毕对应的注冊。

    比如:

    1. SEL_MenuHandler MyLayer::onResolveCCBCCMenuItemSelector(CCObject * pTarget, const char* pSelectorName)  
    2. {  
    3.     CCB_SELECTORRESOLVER_CCMENUITEM_GLUE( this"pressPlay", MyLayer::enterPlay);  
    4.     return NULL;  
    5. }  
    6.   
    7. //函数定义类型为:void pressTitle(CCObject *pSender);  
    8. SEL_CCControlHandler MyLayer::onResolveCCBCCControlSelector(CCObject * pTarget, const char* pSelectorName)    
    9. {    
    10.     CCB_SELECTORRESOLVER_CCCONTROL_GLUE( this"pressTitle", MyLayer::controlButtonTest);    
    11.     return NULL;    
    12. }    
    13.   
    14. bool MyLayer::onAssignCCBMemberVariable(CCObject* pTarget, const char* pMemberVariableName, CCNode* pNode)  
    15. {  
    16.     CCB_MEMBERVARIABLEASSIGNER_GLUE( this"helloLabel", CCLabelTTF*, helloLabel);  
    17.     return false;  
    18. }  


    最后是加载调用。首先将对应的Layer与Loader注冊到CCNodeLoaderLibrary中。然后用CCBReader读出来。最后调用reader的对应方法将资源解析出来。

    比如

    1. CCNodeLoaderLibrary::sharedCCNodeLoaderLibrary()->registerCCNodeLoader( "MyLayer", MyLayerLoder::loader());  
    2. CCBReader* reader = new CCBReader( CCNodeLoaderLibrary::sharedCCNodeLoaderLibrary() );  
    3. reader->autorelease();    // run  
    4. pDirector->runWithScene(reader->createSceneWithNodeGraphFromFile("MyLayer"));  
    5.      

    就是这样了,问题在于每个都要写,一写还是两个(layer与Loader)。

    看着这代码真不爽。晚上回家想想有没有什么好办法改善一下。

    对于上面这堆代码,Good Luck For You。



    本篇博客出自
    阿修罗道,转载请注明出处:http://blog.csdn.net/fansongy/article/details/8860630

  • 相关阅读:
    Do You See Me? Ethical Considerations of the Homeless
    ELDER HOMELESSNESS WHY IS THIS AN ISSUE?
    Endoflife support is lacking for homeless people
    html内联框架
    html字体
    html块 div span
    html列表
    html表格
    SQL Server管理员专用连接的使用   作为一名DBA,经常会处理一些比较棘手的服务无响应问题,鉴于事态的严重性,多数DBA可能直接用“重启”大法,以便尽快的恢复生产环境的正常运转,但是多数情况
    如何配置最大工作线程数 (SQL Server Management Studio)
  • 原文地址:https://www.cnblogs.com/mqxnongmin/p/10628469.html
Copyright © 2011-2022 走看看