首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 操作系统 >

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

2013-04-07 
[cocos2dx开发技巧4]工具CocosBuilder的使用--复杂动画 转发,请保持地址:http://blog.csdn.net/stalendp/a

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

 转发,请保持地址: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


热点排行