本文主要侧重于CocosBuilder在cocos2dx中的集成。对CocosBuilder使用的介绍比较简单。详细的使用请参考官方教程;

CocosBuilder部分

1)创建工程

首先创建Cocos2dx工程“ShootTheApple”,然后在其Resources目录下新建ccb,并在ccb中创建CocosBuilder工程。目录结构如下图:

CocosBuilder工程会产生3类文件,后缀分别为ccbproj, ccb, ccbi(其中前两个文件使工程文件--ccb.ccbproj, apple.ccb。      ccbi文件,是导出的文件,被cocos2dx程序使用,如上图的apple.ccbi);

2)配置cocosBuilder属性

点击菜单File/Publish Setting..., 弹出如下对话框:
按上图进行配置,其中最为重要的是选择导出ccbi的目录,这里将设置为cocos2dx的Resources目录,就是cocosBuilder的上级目录。然后勾选最后的“Flatten paths when publishing”和“Only publish ccb-files”选项。
观察ccb/Resources目录,其中有个ccbResources文件,这里面放ccb使用的图片等资源。在ccb发布成ccbi后,我们还需要把此ccbResources拷贝到cocos2dx的resources目录下,这样ccbi才可以正确的读取。

3)创建ccb文件。

菜单File/New/New File..., 弹出如下的对话框:
这里可以创建4类Object,CCLayer, CCNode, CCParticleSystemQuad和CCSprite;这里还可以选择游戏运行的device的类型,保持默认,点击create后,给定名称(这里为MainScene.ccb),选择ccb/Resources为其根目录,就生成了一个ccb文件。操作界面如下图:
点击界面下方时间轴中的物体,其构成了树状结构(这个正是cocos2dx中对CCNode的构成结构);选择其中一项,比如CCLayer,其右方将显示其相关属性。比如Position, ContentSize,AnchorPoint等信息。当cocosBuilder生成ccbi的时候,将导出这些信息(文件为二进制形式,其中还包含动画信息和回调函数的信息;动画信息在操作界面的下方定义)。cocos2dx在载入这个ccbi文件的时候,将调用相关解析器(CCBReader)来解析这个文件,生成相应的cocos2dx对象,然后呈现出来,并播放相应的动画。

4)编辑ccb文件--按钮

在cocosBuilder的编辑,都是“可见即可得”的。cocosBuilder兼容SpriteSheet(可以使用TexturePacker进行编辑),编辑的时候,直接把图片拖动到模拟器就可以了。
创建按钮有两种方式(和cocos2dx中一样),这里只介绍使用Menu的方式。先创建Menu,点击工具栏中的Menu按钮(左边),如下图:
在当前的Menu中,然后点击Menu按钮的右边5下,就创建了5个MenuItem。类的层次结构,可以在时间轴边上看到。如下图:
创建的按钮如下图:
这时需要在右侧的设置属性,如下图:
设置事件响应函数的名称(如btnPlay,target为Document root);并设置CCMenuItem在三种不同情况下的呈现的图片。完成的按钮如下:
配置完5个按钮,调整位置和缩放等,如下:

4)编辑ccb文件--动画

这里将运用cocosBuilder来制作背景中的一个闪烁的星星,具体使用的是Rotate和Scale动画。
将一颗星星拖入到模拟器中,并移动到右上角,如下图:
选中这个物体,先缩放其为0.1f; 然后在事件轴中的0s和2s处,分别按快捷键v, r和s,创建Visible,Rotate和Scale的关键帧(对应菜单Animations/Insert Keyframe中的相关选项),在1s处,创建scale关键帧;如下图:
点击Scale在1s处的关键帧,做适当的放大和旋转操作。
点击播放按钮,或者手工拖动,可以参看效果。
目前动画只会播放一次,在cocosBuilder中设置循环播放,很简单,在时间轴的下方选择chain TimeLine为自身就可以了,如下图:
这个原理就是,当播放完当前的TimeLime之后,接着再播放此timeline,这样就循环起来的了。
关于timeLine,还可以设置其播放时间(默认为10s),点击时间轴上方的时间:
在弹出的对话框中设置就可以了:
还可以创建多个时间轴,
按照上面的循环动画的方式,也可以串起来做复杂的动画。这些动画也可以在cocos2dx代码中被调用。十分的灵活方便。

代码的集成

当cocosBuilder完成对ccb的编辑之后,点击菜单File/Publish, 导出ccb成为ccbi文件到cocos2dx的Resources文件目录下了(请参考上面的“配置cocosBuilder属性”)。
然后在xcode中把ccbResources目录和相应的ccbi文件加入到工程中,这样就可以进行代码编辑了。
代码的集成,其实就是解析ccbi文件的过程,cocos2dx中针对cocosBuilder有相应的解析器CCBReader(位于extensions/CCBreader目录下,CCBReader和CocosBuilder的版本有关系,请参考文末的“版本说明”);
由于C++没有像Object-C的动态特性,所以集成CCBReader的代码并没有像cocos2d中那么简单。不过理解其原理,理清思路后,其实也不是件困难的事情。
所以,先讲CCBReader的原理。ccbi文件其实对应了4类cocos2dx对象,一个ccbi文件中,包含了此对象的一些属性信息。CCBReader读取了这个ccbi文件,就清楚了这个对象的一切。这个时候,要把这些信息和我们的代码联系起来,就需要用CCNodeLoaderLibrary来联系自定义的类,接着把这个信息抛给CCBReader,由其进行联系。具体代码如下:
[cpp] view plaincopy
  1. CCNodeLoaderLibrary * ccNodeLoaderLibrary = CCNodeLoaderLibrary::newDefaultCCNodeLoaderLibrary();
  2. ccNodeLoaderLibrary->registerCCNodeLoader("Intro", IntroLoader::loader());
  3. /* Create an autorelease CCBReader. */
  4. cocos2d::extension::CCBReader * ccbReader = new cocos2d::extension::CCBReader(ccNodeLoaderLibrary);
  5. /* Read a ccbi file. */
  6. CCNode * node = ccbReader->readNodeGraphFromFile("MainScene.ccbi");
  7. ccbReader->release();
  8. CCScene* scene = CCScene::create();
  9. scene->addChild(node);
要理解上面的代码,还需补充一点上面没有提示的信息。默认情况下,ccbi对应了cocos2dx的4个类型之一,如果要对应我们自定义的类型(从4个类型中派生出来的),我们要在cocosBuilder中的根对象命名,如下图:
选择CCLayer,在右侧的Custom class中填写Intro。(如果是Custom class显示为 JS Controller,点击菜单Document/JavaScipt Controlled, 去掉其选项)。这个就可以理解上面的代码了:
[cpp] view plaincopy
  1. CCNodeLoaderLibrary * ccNodeLoaderLibrary = CCNodeLoaderLibrary::newDefaultCCNodeLoaderLibrary();
  2. ccNodeLoaderLibrary->registerCCNodeLoader("Intro", IntroLoader::loader());

IntroLoader对象负责加载相关的类Intro。完整代码如下:

[cpp] view plaincopy
  1. #ifndef ShootTheApple_Intro_h
  2. #define ShootTheApple_Intro_h
  3. #include "PhysicsSprite.h"
  4. #include "CcbBase.h"
  5. #include "Playground.h"
  6. USING_NS_CC;
  7. USING_NS_CC_EXT;
  8. class Intro: public CcbBase {
  9. public:
  10. CCB_STATIC_NEW_AUTORELEASE_OBJECT_WITH_INIT_METHOD(Intro, create);
  11. Intro(){ }
  12. virtual ~Intro() { }
  13. void btnPlay(cocos2d::CCObject *pSender) {  //这个是回调函数,
  14. CCDirector::sharedDirector()->replaceScene(PlaygroundLoader::loadCcbi());
  15. }
  16. virtual cocos2d::SEL_MenuHandler onResolveCCBCCMenuItemSelector(cocos2d::CCObject * pTarget, const char * pSelectorName) {
  17. CCB_SELECTORRESOLVER_CCMENUITEM_GLUE(this, "btnPlay", Intro::btnPlay);  // 把btnPlay对应回调函数,btnPlay的设置在“编辑ccb文件--按钮”中介绍了
  18. }
  19. };
  20. /* Forward declaration. */
  21. class CCBReader;
  22. class IntroLoader : public cocos2d::extension::CCLayerLoader {
  23. public:
  24. static CCScene* loadCcbi() {
  25. CCNodeLoaderLibrary * ccNodeLoaderLibrary = CCNodeLoaderLibrary::newDefaultCCNodeLoaderLibrary();
  26. ccNodeLoaderLibrary->registerCCNodeLoader("Intro", IntroLoader::loader());
  27. /* Create an autorelease CCBReader. */
  28. cocos2d::extension::CCBReader * ccbReader = new cocos2d::extension::CCBReader(ccNodeLoaderLibrary);
  29. /* Read a ccbi file. */
  30. CCNode * node = ccbReader->readNodeGraphFromFile("MainScene.ccbi");
  31. ccbReader->release();
  32. CCScene* scene = CCScene::create();
  33. scene->addChild(node);
  34. return scene;
  35. }
  36. public:
  37. CCB_STATIC_NEW_AUTORELEASE_OBJECT_METHOD(IntroLoader, loader);
  38. protected:
  39. CCB_VIRTUAL_NEW_AUTORELEASE_CREATECCNODE_METHOD(Intro);
  40. };
  41. #endif
[cpp] view plaincopy
  1. #ifndef ShootTheApple_CcbBase_h
  2. #define ShootTheApple_CcbBase_h
  3. #include "cocos2d.h"
  4. #include "cocos-ext.h"
  5. #include "Box2D.h"
  6. USING_NS_CC;
  7. USING_NS_CC_EXT;
  8. class CcbBase: public cocos2d::CCLayer
  9. , public cocos2d::extension::CCBSelectorResolver
  10. , public cocos2d::extension::CCBMemberVariableAssigner
  11. , public cocos2d::extension::CCNodeLoaderListener
  12. {
  13. public:
  14. virtual cocos2d::SEL_MenuHandler onResolveCCBCCMenuItemSelector(cocos2d::CCObject * pTarget, const char * pSelectorName) {
  15. // do nothing
  16. //CCB_SELECTORRESOLVER_CCMENUITEM_GLUE(this, "onPlay", Playground::btnPlay);
  17. return NULL;
  18. }
  19. virtual cocos2d::extension::SEL_CCControlHandler onResolveCCBCCControlSelector(cocos2d::CCObject * pTarget, const char * pSelectorName) {
  20. // do nothing
  21. return NULL;
  22. }
  23. virtual bool onAssignCCBMemberVariable(cocos2d::CCObject * pTarget, const char * pMemberVariableName, cocos2d::CCNode * pNode) {
  24. // do nothing
  25. //CCB_MEMBERVARIABLEASSIGNER_GLUE(this, "apple", CCSprite *, this->apple);
  26. return NULL;
  27. }
  28. virtual bool onAssignCCBCustomProperty(CCObject* pTarget, const char* pMemberVariableName, cocos2d::extension::CCBValue* pCCBValue) {
  29. // do nothing
  30. return false;
  31. }
  32. virtual void onNodeLoaded(cocos2d::CCNode * pNode, cocos2d::extension::CCNodeLoader * pNodeLoader) {
  33. // do nothing
  34. }
  35. };
  36. #endif

CCReader进行ccbi和自定义类的联系的过程如下,CCBReader一边解析ccbi文件,一边调用自定义类的onResolveCCBCCMenuItemSelector等方法;在这些回调方法中,可以进行相关的绑定工作,如对象绑定,CCMenuItem selector的绑定等。更多的绑定细则,请参考cocosBuilder中的帮助。

如果用Object-C就方便多了,由于其动态性,可以根据名称自动反射,而C++则需要手工绑定,繁琐些,不过为了cocosBuilder带来的方便,这个也值得。
下一篇文章介绍怎么使用CocosBuilder加快Box2d的开发

版本说明

在这个demo中,cocosBuilder的版本为Version 3 alpha3,配套的cocos2dx版本为cocos2d-2.1rc0-x-2.1.2;

cocosBuilder的官方:http://cocosbuilder.com/

cocosBuilder官方教程:https://github.com/vlidholt/CocosDragon/blob/master/Tutorial/Tutorial.md

cocos2dx的相关页面:http://www.cocos2d-x.org/news/95

源代码下载: http://vdisk.weibo.com/s/BSjUaUQYZZ_MR

源码下载2:链接:http://pan.baidu.com/s/1qYJ4Nnu 密码:g66s

CocosBuilder 使用技巧相关推荐

  1. [cocos2dx开发技巧4]工具CocosBuilder的使用--复杂动画

    转发,请保持地址:http://blog.csdn.net/stalendp/article/details/8760957 一个网友推荐过一款制作动画的工具,叫做 Spriter: 其中有个Demo ...

  2. [cocos2dx开发技巧1]工具CocosBuilder的使用--demo介绍

    转发,请保持地址:http://blog.csdn.net/stalendp/article/details/8755958 最近在接触CocosBuilder之后,发现这是一款非常优秀的软件,可以加 ...

  3. [cocos2dx开发技巧2]工具CocosBuilder的使用--集成

    转发,请保持地址:http://blog.csdn.net/stalendp/article/details/8756467 本文主要侧重于CocosBuilder在cocos2dx中的集成.对Coc ...

  4. Cocos2d-x 与Cocosbuilder结合使用的一些技巧

    转自:http://jetion.diandian.com/post/2012-12-04/40047798280,感谢作者分享 1. 使用Cocosbuilder制作帧动画,Publish的时候崩溃 ...

  5. CocosBuilder 完全攻略 (译)

    本文翻译自:http://www.raywenderlich.com/23996/introduction-to-cocosbuilder 翻译:弹涂鱼 CocosBuilder与interface ...

  6. cocosBuilder播放动画

    Working with Animations 动画 You can use CocosBuilder for creating character animations, animating com ...

  7. keyshot怎么批量渲染_提高Keyshot逼真渲染的小技巧

    Keyshot是一个特别神奇的应用软件,但是,就像Photoshop一样,如果你不知道怎么使用它,那么再优秀的工具在你手中也什么都是了.这里我就告诉你一些制作优秀效果图的技巧以及如何使用这个神奇软件. ...

  8. Linux shell 学习笔记(6)— vim 编辑器使用方法及技巧

    1. 检查 vim 软件包 1.1 CentOS 发行版 $ alias vi alias vi='vim' $ $ which vim /usr/bin/vim $ $ ls -l /usr/bin ...

  9. Python 笔试面试及常用技巧 (1)

    1. 交换两个数字 In [66]: x, y = 1, 2In [67]: x Out[67]: 1In [68]: y Out[68]: 2 赋值的右侧形成了一个新的元组,左侧立即解析(unpac ...

  10. Redis 使用技巧

    Redis 现在非常受欢迎,似乎已经成为内存数据存储行业的标准.本人结合平时使用Redis经验,也同时查找了一些网上别人的总结经验,总结以下几条Redis使用技巧. 1. 停止使用 KEYS 众所周知 ...

最新文章

  1. php点击复制按钮到我的粘贴板,JS 实现点击按钮复制内容到粘贴板 clipboard
  2. c语言中int和指针和字符所占字节
  3. Linux起不来,如何修复
  4. [Leetcode 15]三数之和 3 Sum
  5. 用FadingActionBar实现有头图的ActionBar
  6. Linux编程(7)_gdb
  7. 微信小程序中如何使用setData修改数组或对象中的某一参数
  8. php.ini – 配置文件详解
  9. FlashDevelop 3.0.0 Rc2 版本下载
  10. 阿里马涛:重新定义云时代的开源操作系统
  11. Linux系统配置静态IP地址步骤
  12. 白帽子讲Web安全(第一章总结)
  13. C#发送邮件,包含发送附件
  14. 我要多开梦幻手游PC端(梦幻手游PC端多开的简单分析及实现办法)(二)
  15. 大数据安全体系介绍之技术体系篇
  16. MIMO技术与链路容量
  17. android sensor hal,Android Sensor详解(3)porting drvier
  18. 26丨案例:手把手带你理解TPS趋势分析*
  19. 【前端面试指南】简历上的前端常用单词,你拼写对了吗?
  20. java 时间轮_基于时间轮的定时任务

热门文章

  1. 地理加权回归简易总结
  2. Linux中查看bz2压缩文件大小,Linux bz2文件解压与压缩之bzip2命令
  3. 痞子衡嵌入式:恩智浦i.MX RT1xxx系列MCU启动那些事(6)- Bootable image格式与加载(elftosb/.bd)...
  4. 看产品经理怎么用360实现Java垃圾回收!
  5. MATLAB中基于GUI的噪声抑制imnoise,medfilt2命令
  6. MySQL 管理表记录
  7. vue基础----用vue来展示表格数据
  8. Day33:Swift 和 Object - C
  9. 如何快速成长为图形学工程师
  10. Quartus破解成功,但出现不支持某些设备的问题解决