分类: 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. 阿里云 Ubuntu16.04 部署 LAMP

    1.更新软件源 sudo apt-get update 2.安装Apache sudo apt-get install apache2 3.查看Apache是否安装成功 apache2 –v 如下所示 ...

  2. TXT文件导入到ORACLE数据库中

    --创建表 (sqlplus执行) drop table cjw; ),phone ),city ),born ),adressJob ),mail )); ### txt导入到oracle cat ...

  3. C#中Internal关键字的总结

    https://blog.csdn.net/baidu_32134295/article/details/51285603     版权声明:本文为博主原创文章,未经博主允许不得转载. https:/ ...

  4. Yii2 前台控制器访问权限控制

    class BaseController extends Controller { public function behaviors() { return [ 'access' => [ 'c ...

  5. 转 oracheck

    转 https://dbaplus.cn/news-10-220-1.html ORAchk 之前被称为RACcheck,后来它的检查范围进行了扩展,改名为了ORAchk,它是在数据库系统进行健康检查 ...

  6. ES6多行字符串+模板字符串

    多行字符串 最新的ES6标准新增了一种多行字符串的表示方法,用反引号 ` ... ` 表示: 'use strict'; // 如果浏览器支持模板字符串,将会替换字符串内部的变量: var name ...

  7. 硬盘和显卡的访问与控制(一)——《x86汇编语言:从实模式到保护模式》读书笔记01

    本文是<x86汇编语言:从实模式到保护模式>(电子工业出版社)的读书实验笔记. 这篇文章我们先不分析代码,而是说一下在Bochs环境下如何看到实验结果. 需要的源码文件 第一个文件是加载程 ...

  8. ORACLE 查看表空间

    select tablespace_name, file_id, file_name,round(bytes/(1024*1024),0) total_spacefrom dba_data_files ...

  9. PrintPreviewControl

    用于按文档打印时的外观显示PrintDocument对象.此控件没有按钮或其他用户界面元素,因此通常只有在希望编写自己的打印预览用户界面时才会使用PrintpreviewControl 属性 Docu ...

  10. C# Label背景透明

    Label背景透明是相对于Label的Parent而言的,如果Label的Parent是一个winform,而这个winform又有一个PictureBox,现在Label放在PictureBox上, ...