Cocos2D-X中针对CocosBuilder的解析器CCBReader
2014-04-08 09:54 张智清 阅读(6263) 评论(0) 编辑 收藏 举报之前的一博客空间到期没有备份,丢失了一些资料。以下仅仅通过搜素引擎找回的一些东东!
首先知道Cocos2D项目:
在Cocos2D项目中加载ccb文件:在加载CocosBuilder的文件 前,CocosBuilder文档或者ccb文件需要以一种压缩的二进制各式发布——即ccbi文件。一旦被发布为ccbi文件,则只需要一行代码即可简 单地加载到具体的Cocos2D工程项目中(前提保证已经将CCBReader.h和CCBReader.m文件添加到项目中):
CCBReader *ccbReader = new cocos2d::extension::CCBReader(ccNodeLoaderLibrary); CCNode *myNode = ccbReader->readNodeGraphFromFile( "MyNodeGraph<strong style=" color: rgba(0, 0, 0, 1); background-color: rgba(255, 102, 255, 1) ">.</strong>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,由其进行关联。具体代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 | 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<strong style="color: rgba(0, 0, 0, 1); background-color: rgba(255, 102, 255, 1)">.</strong> */ CCNode *node = ccbReader->readNodeGraphFromFile( "MainScene<strong style=" color: rgba(0, 0, 0, 1); background-color: rgba(255, 102, 255, 1) ">.</strong>ccbi" ); ccbReader->release(); CCScene *scene = CCScene::create(); scene->addChild(node); |
默认情况下,ccbi对应了Cocos2D-X的4个类型之一,如果要对应咱自定义的类型(从那4个类型中派生出来的),我们要在CocosBuilder中的根对象命名,如下图:
选择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带来方便,这个也是值得的。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架