cocos2d-x 3.2的ActionManagerEx存在bug,重复播放UI动画会崩溃,附解决办法

cocos2d-x 3.2的ActionManagerEx存在bug,重复播放UI动画会崩溃,附解决办法,第1张

概述在Cocos Studio的UI编辑器里编辑好的动画,可以用这种方式来播放: ccs.ActionManagerEx:getInstance():playActionByName("TestUI.ExportJson", "animation1") 但如果当前的场景会被切换走又切换回来,就免不了要重新加载UI的JSON文件、重新播放这个动画,如果在代码里重新调用上面那句,程序就会崩溃。原因是CCA

在Cocos Studio的UI编辑器里编辑好的动画,可以用这种方式来播放:

ccs.ActionManagerEx:getInstance():playActionByname("TestUI.ExportJson","animation1")

但如果当前的场景会被切换走又切换回来,就免不了要重新加载UI的JsON文件、重新播放这个动画,如果在代码里重新调用上面那句,程序就会崩溃。原因是CCActionManagerEx.cpp@H_502_6@中存在BUG,在第二次加载相同的JsON文件时,新的rootWidget等指针没有得到更新。

解决办法如下,找到CCActionManagerEx.cpp@H_502_6@文件,把代码改了,重新编译一遍项目,动画反复播放就没问题了

网上其他解决办法都不靠谱,包括调用ccs.ActionManagerEx:getInstance():releaseActions()@H_502_6@,这都不靠谱,因为在两个UI场景互相切换、两个UI场景都需要播放UI动画的互相掺合的情况下谁去调用releaseActions()方法都会误伤即将要播放的动画,没有一个特别合适的时机来做这件事,这个问题的产生原因就是代码错误,必须改cocos2d-x的源代码,从源头解决这个BUG才行。

我已提交Pull Request(https://github.com/cocos2d/cocos2d-x/pull/7957),希望cocos2d-x团队在下一个小版本中解决这个问题。

另外,不能忘了在场景移除时停止动画,完整的代码应该是像这样:

------------------------------------------------- 场景被加载和销毁时自动播放和停止动画scene:registerScriptHandler(function(eventType)  if eventType == "enterTransitionFinish" then    -- 场景被加载完成,播放动画    scene.testActionObject = ccs.ActionManagerEx:getInstance():playActionByname("TestUI.ExportJson","testAnimation")  elseif eventType == "exitTransitionStart" then    -- 场景即将被移除,停止动画    scene.testActionObject:stop()  endend)
总结

以上是内存溢出为你收集整理的cocos2d-x 3.2的ActionManagerEx存在bug,重复播放UI动画会崩溃,附解决办法全部内容,希望文章能够帮你解决cocos2d-x 3.2的ActionManagerEx存在bug,重复播放UI动画会崩溃,附解决办法所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1028746.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)