分类: Cocos2D-X2013-04-27
20:37 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

cocosBuilder生成cbbi文件,绑定到cocos2d-x的更多相关文章

  1. php中soap的使用实例以及生成WSDL文件,提供自动生成WSDL文件的类库——SoapDiscovery.class.php类

    1. web service普及: Webservice soap wsdl区别之个人见解 Web Service实现业务诉求:  Web Service是真正“办事”的那个,提供一种办事接口的统称. ...

  2. php学习之道:php中soap的使用实例以及生成WSDL文件,提供自己主动生成WSDL文件的类库——SoapDiscovery.class.php类

    1. web service普及: Webservice soap wsdl差别之个人见解 Web Service实现业务诉求:  Web Service是真正"办事"的那个,提供 ...

  3. [C#]Google Chrome 书签导出并生成 MHTML 文件

    目的 因为某些原因需要将存放在 Google Chrome 内的书签导出到本地,所幸 Google Chrome 提供了导出书签的功能. 分析 首先在 Google Chrome 浏览器当中输入 ch ...

  4. 2018年,请不要再使用OLE生成EXCEL文件

    输出EXCEL文件是ABAP开发工作中的常见需求,为了学习相关技术,我翻译过一篇文章:使用OLE2对象创建EXCEL文件,并且一度乐在其中. 最近几个月,经过与若干EXCEL打印程序的艰苦斗争,以及对 ...

  5. Google Chrome 书签导出并生成 MHTML 文件

    目的 因为某些原因需要将存放在 Google Chrome 内的书签导出到本地,所幸 Google Chrome 提供了导出书签的功能. 分析 首先在 Google Chrome 浏览器当中输入 ch ...

  6. Keil开发环境如何生成BIN文件

    为什么需要BIN文件呢? 有些烧录器只支持BIN文件. 进行OTA远程升级时,只能使用BIN文件. 使用JLink脚本文件进行一键烧录时,只支持BIN文件. BIN文件要比HEX和AXF文件小的多. ...

  7. 24.-Django生成csv文件及下载

    一.csv文件定义 逗号分隔值(comma-separated values, csv,有时页称字符分隔值,因为分分隔字符页可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本) 说明:可被常见 ...

  8. Android 解析XML文件和生成XML文件

    解析XML文件 public static void initXML(Context context) { //can't create in /data/media/0 because permis ...

  9. SQL*Plus生成html文件

    最近使用SQL*Plus命令生成html文件,遇到一些有意思的知识点,顺便记录一下,方便以后需要的时候而这些知识点又忘记而捉急.好记性不如烂笔头吗! 为什么要用SQL*Plus生成html文件?   ...

随机推荐

  1. iOS WebDriverAgent 环境搭建

    WebDriverAgent简介 WebDriverAgent是Facebook 在去年的 SeleniumConf 大会上推出了一款新的iOS移动测试框架.当时的推文申明,还只支持模拟器,不过在今年 ...

  2. TCP/IP、Http、Https、Socket的区别

    网络由下往上分为物理层.数据链路层.网络层( IP协议).传输层( TCP协议).会话层.表示层和应用层(HTTP协议) 接下来我来说说个人理解其中的TCP/IP.Http.Socket的区别 TCP ...

  3. win安装wordcloud报错解决方案

    可以知道需要安装的是32位系统上的python 3.6.5版本的 ②登陆 https://www.lfd.uci.edu/~gohlke/pythonlibs/#wordcloud 网址找到相应文件 ...

  4. g++ -I(大写i) 与-L(大写l)-l(小写l) 的作用与学习

    linux 下 g++编译程序时,-I(大写i) 与-L(大写l)-l(小写l) 的作用 作为一个linux入门级使用者,gcc/g++ 的简单操作已经用过多次, 但是有时稍微复杂一点的程序就会使用到 ...

  5. JS你可能还不知道的一些知识点(一)

    js程序是用Unicode字符集编写的, 2.转义字符:反斜线 1 2 3 4 function Test(){   var s='you\'re right,it can\'t be a quote ...

  6. JavaSE---Collections

    1.简介: Collections是一个工具类 1.1 排序 a,正序  sort是其静态方法,有2种参数形式: public static <T extends Comparable<? ...

  7. MemoryFile匿名共享内存

    Android提供了一个高效的共享内存机制.如果应用中涉及到在多个进程间交换数据时使用Android提高的共享内存机制将会大大的提高效率.但是也许是出于安全考虑,在应用层使用共享内存机制将会遇到很多障 ...

  8. Python操作列表

    1.List Python内置的一种数据类型是列表:list.list是一种有序的集合,可以随时添加和删除其中的元素. 比如,列出班里所有同学的名字,就可以用一个list表示: >>> ...

  9. Murano Application

    OpenStack Application Link: http://apps.openstack.org/ Those applications include Murano packages, H ...

  10. ErlangC 最佳人力效益指标

    以平均服务时间(AHT)180秒,顾客来电量每15分钟150通以及服务目标时间在20秒内为例子说明最佳人力效益指标.此假设条件下由Erlang C模拟器的结果如下图, 假设我希望客服中心的期望服务水准 ...