zoukankan      html  css  js  c++  java
  • Cocos2d-x中子ccb动画无法正常播放的问题

    美术做了个ccb中嵌套若干个子ccb的动画,其中子ccb A和B是一开始就播放的,CDE是在播放了一段时间后再通过visible设置显示出来。这个动画在CocosBuilder播放很正常,但是放到cocos2d-x里面就不对,子动画不能正常的动。

    跟踪调试了1天半才搞清楚标,问题在runAnimationsForSequenceIdTweenDuration这个函数里,这个函数有两处stopAllAction:

    1. mRootNode->stopAllActions()这个会在每个子ccb每次自己结束后的回调时进入该函数被调用,效果是会造成子ccb的visible不正常显示出来,压根看不到。具体原理还没研究明白。
    2. node->stopAllActions()这个会由于读主ccb时,子ccb的动画就已经读入并且开始播了,然后主ccb读到最后,会播放自己autoplay的动画从而调用该函数被调用,然后停止子ccb的动作——这个节点因为是根节点,所以只是停掉根的动作,按理说动作都是加在孩子上的。可是事实上根上有一个非常重要的动作,那就是计时动画时间结束后调用回调,从而实现循环播放的功能,这里停掉了就不会循环播放而是只播放一次了。

    不过没明白本,也没想清楚怎么改好,然后同事发现cocos2d里面是对的。对比发现(为啥cocos2d-x里面没有这段代码!!!),问题的根本是主ccb的animationmanager在以上stopallaction的时候停掉了不是自己加上的,子ccb的animationmanager管理的动作,所以没法恢复正常播放。解决方法很简单,给每个animationmanager都打个唯一的id,然后每个action都打上这个id,这样在停的时候,只停自己管的那些,就ok啦。

  • 相关阅读:
    单线程的JavaScript是如何实现异步的
    前端优化之 -- 使用 require.context 让项目实现路由自动导入
    插入排序
    选择排序
    冒泡排序
    强缓存和协商缓存
    ES6 Set求两个数组的并集、交集、差集;以及对数组去重
    实现一个new操作符
    我理解的浅拷贝和深拷贝
    javascript专题系列--js乱序
  • 原文地址:https://www.cnblogs.com/unionfind/p/3370554.html
Copyright © 2011-2022 走看看