分类: 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. ubuntu下用apt-get安装lamp缺少mcrypt , curl

    用apt-get安装的LAMP环境,但安装magento报没有mcrypt和curl,   解决方法如下: curl安装: sudo apt-get install curl libcurl3 lib ...

  2. (转)Caffe搭建:常见问题解决办法和ubuntu使用中遇到问题(持续更新)

    参考网址:http://www.cnblogs.com/empty16/p/4828476.html 严正声明: 在linux下面使用命令行操作时,一定要懂得命令行的意思,然后再执行,要不然在不知道接 ...

  3. ubuntu 修改hostname

    1.sudo gedit /etc/hostname 2. 修改成你的新名字,例如 SS1 3. 保存,退出 3. sudo gedit /etc/hosts 4修改成心的名字 SS1 5. 保存,退 ...

  4. 生成jvm快照文件

    原文:https://blog.csdn.net/jijianshuai/article/details/79128033  -Xmx20m -Xms5m -XX:HeapDumpOnOutofMem ...

  5. Django相关的MTV

  6. Win10磁盘占用率过高

    打开服务 禁用Superfetch 禁用Windows Search 禁用Connected User Experiences and Telemetry 禁用Windows Update[恢复选项卡 ...

  7. Cache一致性协议之MESI

    http://blog.csdn.net/muxiqingyang/article/details/6615199 Cache一致性协议之MESI 处理器上有一套完整的协议,来保证Cache一致性.比 ...

  8. Keepalived & Lvs集群搭建实验

    实验拓扑图: 实验原理: Keepalived 是基于 LVS ,并与 LVS 高度融合的 LVS和keepalived的关系:lvs起的是负载均衡功能,而keepalived则是高可用(热 备)的支 ...

  9. Missing artifact jdk.tools:jdk.tools:jar:1.6

    今天从svn上面下载了一个mavan项目,出现Missing artifact jdk.tools:jdk.tools:jar:1.6 这个错误. 怎么解决了,在我的根pom.xml 下加入这个依赖就 ...

  10. POJ 3694——Network——————【连通图,LCA求桥】

    Network Time Limit:5000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Submit Stat ...