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

时间:2022-04-08 12:10:50

 转发,请保持地址:http://blog.csdn.net/stalendp/article/details/8760957

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

这篇文章中,我将使用CocosBuilder来复制这个例子,先看截图。

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

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

创建File,Root object Type为CCNode,不需要FullScreen, 命名这个文件为monster.ccb:

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

把相应的13个图片拖动到模拟器中,如下图:

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

然后调整好位置,图层顺序等,如下图:

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


接下来的工作就是实现动画了。这里将介绍两个动画,一个是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动画。如下图:

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

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

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

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

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

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

然后创建playground文件,用来测试这个monster。具体如下:

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

按钮的回调函数设置如下:

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

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

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

class Playground: public CcbBase {
private:
CCNode* monster;
public:
CCB_STATIC_NEW_AUTORELEASE_OBJECT_WITH_INIT_METHOD(Playground, create);

Playground():monster(NULL) {

}

virtual ~Playground() {
CC_SAFE_RELEASE(monster);
}

bool onAssignCCBMemberVariable(cocos2d::CCObject * pTarget, const char * pMemberVariableName, cocos2d::CCNode * pNode) {
CCB_MEMBERVARIABLEASSIGNER_GLUE(this, "monster", CCNode *, this->monster);
return NULL;
}

virtual cocos2d::SEL_MenuHandler onResolveCCBCCMenuItemSelector(cocos2d::CCObject * pTarget, const char * pSelectorName) {
CCB_SELECTORRESOLVER_CCMENUITEM_GLUE(this, "onAttack", Playground::onAttack);
return NULL;
}

void onAttack(cocos2d::CCObject *pSender) {
CCLOG("attacking");

CCBAnimationManager* animationManager = (CCBAnimationManager*)monster->getUserObject();
animationManager->runAnimationsForSequenceNamed("attack"); //播放attack动画
}

};

demo下载地址: http://download.csdn.net/detail/stalendp/5222590