CocosBuilder的使用--复杂动画

CocosBuilder的使用--复杂动画
一个网友推荐过一款制作动画的工具,叫做 Spriter; 其中有个Demo介绍怎么制作游戏中的boss,十分精彩;Sprite的Demo地址为:How to use Spriter 0;资源下载地址:Monster;

这篇文章中,我将使用CocosBuilder来复制这个例子,先看截图。
和这个系列之前的文章中一样,先创建cocos2dx工程,命名为Monster,然后在Monster的Resources下建立ccb文件夹,在ccb下创建CocosBuilder工程。然后设置相关属性,拷贝相应的文件。加下来就是cocosBuilder的设计了。

创建File,Root object Type为CCNode,不需要FullScreen, 命名这个文件为monster.ccb:
把相应的13个图片拖动到模拟器中,如下图:
然后调整好位置,图层顺序等,如下图:
接下来的工作就是实现动画了。这里将介绍两个动画,一个是prepare动画,monster在做原地摆臂运动;一个是attack动画,monster将进行一个攻击性动画。

其实动画就是对monster的13个图片进行的Rotate和position等动画设置。(cocosBuilder的详细操作,请参考《[cocos2dx开发技巧2]工具CocosBuilder的使用--集成》)

这里重点介绍attack动画中的头部的动画。头部动画要设计到Rotate,position和frame动画。选择head_0, 在0s,1s处点击r和p按钮,分别创建Rotate和Position的关键帧。然后做相应的调整,在1s只能创建frame动画。如下图:

然后拖动时间轴,查看效果:论文网 

创建好attack和prepare动画之后,还要使它们连接起来。attack动画播放完之后,就进入prepare;prepare动画播放完之后接着播放prepare动画(循环播放);具体的时间轴串联,请参考《[cocos2dx开发技巧2]工具CocosBuilder的使用--集成》。

然后创建playground文件,用来测试这个monster。具体如下:
按钮的回调函数设置如下:
导出monster.ccbi, playground.ccbi, 然后在xcode中导入相关文件,就可以进行cocos2dx端的编码了。程序的功能是,当点击btn时,将使prepare状态下的monster进行attack。主要是实现点击按钮的回调函数onAttack。

在xocde中创建Playground类,做如下实现:


[cpp] view plaincopyprint?
01.class Playground: public CcbBase { 
02.private: 
03.    CCNode* monster; 
04.public: 
05.    CCB_STATIC_NEW_AUTORELEASE_OBJECT_WITH_INIT_METHOD(Playground, create); 
06.     
07.    Playground():monster(NULL) { 
08.         
09.    } 
10.     
11.    virtual ~Playground() { 
12.        CC_SAFE_RELEASE(monster); 
13.    } 
14.     
15.    bool onAssignCCBMemberVariable(cocos2d::CCObject * pTarget, const char * pMemberVariableName, cocos2d::CCNode * pNode) { 
16.        CCB_MEMBERVARIABLEASSIGNER_GLUE(this, "monster", CCNode *, this->monster); 
17.        return NULL; 
18.    } 
19.     
20.    virtual cocos2d::SEL_MenuHandler onResolveCCBCCMenuItemSelector(cocos2d::CCObject * pTarget, const char * pSelectorName) { 
21.        CCB_SELECTORRESOLVER_CCMENUITEM_GLUE(this, "onAttack", Playground::onAttack); 
22.        return NULL; 
23.    } 
24.     
25.    void onAttack(cocos2d::CCObject *pSender) { 
26.        CCLOG("attacking"); 
27.         
28.        CCBAnimationManager* animationManager = (CCBAnimationManager*)monster->getUserObject(); 
29.        animationManager->runAnimationsForSequenceNamed("attack");  //播放attack动画  
30.    } 
31.     
32.}; 

Copyright © 2007-2012 www.chuibin.com 六维论文网 版权所有