Cocos2d-x中子ccb动画无法正常播放的问题
美术做了个ccb中嵌套若干个子ccb的动画,其中子ccb A和B是一开始就播放的,CDE是在播放了一段时间后再通过visible设置显示出来。这个动画在CocosBuilder播放很正常,但是放到cocos2d-x里面就不对,子动画不能正常的动。
跟踪调试了1天半才搞清楚标,问题在runAnimationsForSequenceIdTweenDuration这个函数里,这个函数有两处stopAllAction:
- mRootNode->stopAllActions()这个会在每个子ccb每次自己结束后的回调时进入该函数被调用,效果是会造成子ccb的visible不正常显示出来,压根看不到。具体原理还没研究明白。
- node->stopAllActions()这个会由于读主ccb时,子ccb的动画就已经读入并且开始播了,然后主ccb读到最后,会播放自己autoplay的动画从而调用该函数被调用,然后停止子ccb的动作——这个节点因为是根节点,所以只是停掉根的动作,按理说动作都是加在孩子上的。可是事实上根上有一个非常重要的动作,那就是计时动画时间结束后调用回调,从而实现循环播放的功能,这里停掉了就不会循环播放而是只播放一次了。
不过没明白本,也没想清楚怎么改好,然后同事发现cocos2d里面是对的。对比发现(为啥cocos2d-x里面没有这段代码!!!),问题的根本是主ccb的animationmanager在以上stopallaction的时候停掉了不是自己加上的,子ccb的animationmanager管理的动作,所以没法恢复正常播放。解决方法很简单,给每个animationmanager都打个唯一的id,然后每个action都打上这个id,这样在停的时候,只停自己管的那些,就ok啦。