Cocos2d-x游戏开发CCBAnimationManager控制动画
2015-09-27 16:42
525 查看
CocosBuilder能方便的编辑各种动画。大部分动画都是以独立片段的形式存在的。 须要由程序来控制何时播放。 管理ccbi文件的动画播放有个专门的类:CCBAnimationManager 大致的逻辑是这种: 全部的动画以动作的形式存在一个CCArray中。 这个ActionManager管理这些动作。 我们如今想做的无非两件事:控制播放动作,当动作结束时得到通知。 我们在cocosBuilder中设置的默认动作。是当Scene层的OnEnter载入完毕,就会播放的。 因此要对当中的元素改动,应在onEnter中进行。 好。如今我们面临的第一个问题是当第一个动作结束时,我怎样知道? 在这个类中有这样一个函数: void setAnimationCompletedCallback(CCObject *target, SEL_CallFunc callbackFunc); 我们能够这样用: m_AnimationManager->setAnimationCompletedCallback(this,callfunc_selector(CCBABC::ThisIsCallBack)); 回调函数定义例如以下: void ThisIsCallBack(); 这样当第一个动作运行完,就会调用这个函数。 即使你有一个CCSquence。 比方,在cocosBuilder设置了动画链,它也是会被调用的。你唯一要注意的是。这个注冊必须在动作结束之前。 好。以下的第二个问题,怎样让下一个动作执行。 void runAnimationsForSequenceNamedTweenDuration(const char *pName, float fTweenDuration); void runAnimationsForSequenceNamed(const char *pName); void runAnimationsForSequenceIdTweenDuration(int nSeqId, float fTweenDuraiton); 相同是在CCBAnimationManager中,它们是播放动画的方法。 name即是你在cocosBuilder起的动画名称。fTweenDuration是两个动画之间的间隔。中间那个函数表示没有间隔。 所以,我们能够这样用: void CCBAbc::ThisIsCallBack() { //do some change //...... mAnimationManager->setAnimationCompletedCallback(this,callfunc_selector(CCBAbc::showOutCallBack)); mAnimationManager->runAnimationsForSequenceNamed("showOut"); } 这样我们就能将一串动作串起来了! 知道了怎么控制动画之后。还有个问题,就是怎样把cbbi的CCBAnimationManager找到呢? 这就要从extensions\CCBReader\CCNodeLoader.cpp这个文件说起了。 当调用CCBReader::readNodeGraph方法是。会Load对应的Node。当中会调用: CCNode * CCNodeLoader::loadCCNode(CCNode * pParent, CCBReader * pCCBReader) { CCNode * ccNode = this->createCCNode(pParent, pCCBReader); //this->parseProperties(ccNode, pParent, pCCBReader); return ccNode; } 这种方法。可见由ccbi文件读进来的每个元素,都是通过Loader中的这种方法创建的。 这种方法是什么? #define CCB_VIRTUAL_NEW_AUTORELEASE_CREATECCNODE_METHOD(T) virtual T * createCCNode(cocos2d::CCNode * pParent, cocos2d::extension::CCBReader * pCCBReader) { \ return T::create(); \ } 就是创建一个CCNode而已。 我们要做的就是重写这种方法,原理是由于我们要调用CCBReader中的getAnimationManager()这种方法。将得到的manager保存到一个私有变量中就成了。 我这个写到宏里了,凑合看吧 哈 virtual T* createCCNode(cocos2d::CCNode * pParent, cocos2d::extension::CCBReader * pCCBReader) \ { \ T * pRet = new T(); \ if (pRet && pRet->init()) \ { \ pRet->autorelease(); \ pRet->setAnimationManager( pCCBReader->getAnimationManager() ); \ } \ else \ { \ CC_SAFE_DELETE(pRet); \ } \ return pRet; \ } \ 当中setAnimationManager保存了这个值。 ok。这样一来就能够操作cbbi中的AnimationManager了,当然也就能够自由控制动画的流程啦~ 转自/article/1386450.html |
相关文章推荐
- [原创]COCOS2DX 3.8 增加protobuf为external库
- Debugging Lua Project created in Cocos Code IDE creates “Waiting for debugger to connect” in Win-7
- cocos-js如何播放cocos studio 上的动画帧
- cocos2dx and c++ 的小坑
- Cocos2d-x 相关辅助宏
- 在Android平台上运行Cocos2D-x的HelloWorld
- Cocos Studio学习笔记第一篇--界面
- Cocos2d-x学习(二) 在Cocos2d-x2.2.6搭建你第一个项目
- 【cocos2d-x-3.1.1列2】cocos2d-x3.1.1 安卓移植过程
- cocos-js 3.8 控件触摸事件处理
- Cocos2d-x3.0游戏实例《不要救我》第十篇(结束)——使用Json配置数据类型的怪物
- [Cocos2d塔防游戏开发]Cocos2dx-3.X完成塔防游戏《王国保卫战》--防御塔(一)
- cocos2d-js 3.8监听返回键,进入后台,恢复显示
- Cocos2d-x 周边工具 之 TexturePacker
- cocos2d-x3.2 studio -------- 打包apk
- Cocos2d-X中国象棋的发展《五岁以下儿童》摆棋
- cocos2d-x相关类的作用参考
- Sprite3D学习笔记(一):3D模型的换装功能.
- Cocos2d-x学习(一) Cocos2d-x2.2.6安装前准备
- 于windows建筑物Cocos2d-x win32开发环境