Cocos2D-X中针对CocosBuilder的解析器CCBReader
2014-04-08 09:54 张智清 阅读(6253) 评论(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.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,由其进行关联。具体代码如下:
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. */ CCNode *node = ccbReader->readNodeGraphFromFile("MainScene.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带来方便,这个也是值得的。