记一个Cocos动画播放无效的bug

昨天在做AVG弹幕功能的时候遇到了一个神奇的bug:UI给CSD工程加了一个简单的in和out动画,但是在游戏中却无法播放。我试着runAction了一把,游戏居然直接崩溃了。

我在脚本层面调试了一波,发现它确实完完整整地走完了UI的play_animation函数,连回调函数都调用了。我怀疑可能是引擎的问题,于是给主程汇报了一下,在引擎中进一步进行调试。

然后就发现了UI工程存在这个问题:

这个UI工程本身又嵌套了另一个UI工程:

但是在引擎里,发现播放in动画的UI节点居然不是layer_send节点,而是node_bubble节点!

经过进一步探查,发现是因为引擎在播放动画时,是根据工程的脚本文件中的ActionTag和Tag来对节点进行识别:

但是非常巧,子工程节点的ActionTag和Tag与父亲工程root节点的Tag重复了。于是导致了子工程节点执行了in动画!

我们把子工程的Tag和ActionTag改掉,果然就可以正常播动画了。

这个bug非常隐蔽,UI自己很难排查。如果能在UI导出工具里予以检查的话或许能防患于未然。

原文地址:https://www.cnblogs.com/wickedpriest/p/13768162.html