2.2.2 cc.tween没有cc.action省心

用cc.tween修改图片fillRange

问题1,如果场景切换的时候还有正在运行的cc.tween会报错,必现,只能在场景切换前主动停止所有动作
问题2,在微信小游戏会崩溃,第一次打开大概率没事,从第二次打开开始很大概率出错,开发者工具里也会

问题2中微信小游戏真机崩溃截图

问题2中微信开发者工具崩溃截图

估计是场景切换,node节点被销毁了。但是cc.tween还没运行完,还会回调该节点组件,这时就是null报错了。可以把cc.tween的对象保留在组件属性上。组件destory时,把该cc.tween对象手动stop,这点很蛋疼。

已经这样干了,前面的问题1就能解决,但是问题2还是不行

问题 2 能给个具体点的复现方法吗?或者上传个 demo?

mac版本10.15.3
cocos creator版本2.2.2
微信开发者工具版本1.02.1911180
demo包含了构建信息,太大了无法上传,放到网盘了,还附带了操作视频
https://ttqb-de.oss-cn-shanghai.aliyuncs.com/1.zip

大佬,有信么,这俩问题搞定了,还等着升级2.3.0呢

只有当执行对象失效是才会有报错,正常情况没有报错的。

存在场景切换后,如果对象数据随着场景的销毁失去了有效性,会出现这个报错。建议使用 .call 给 tween 添加回调来解决问题:

this.px_tween = cc.tween(cc.find("Canvas/progress/LongGrassland").getComponent(cc.Sprite))
        .to(0.8, { fillRange: 1 })
        .call(()=>{
            cc.director.loadScene('hall');
        })
        .start()  

tween用着没有action舒服啊,action在场景切换,节点隐藏的时候都不用用户操心,哪怕在action回调中操作节点的时候场景被切换也不用怕,完全不会报错
官方大佬们研究研究这种细节吧

之前用action的时候,如果一个战斗场景出错了,或者网络断了,数据不同步了等等,都可以简单粗暴重新进一次场景,重新同步数据
现在用了tween,还得在重进场景前做清理工作,很容易漏掉东西。在调试的时候恰好不出错,到了线上玩家战场就会卡住,大部分玩家不懂得杀掉微信重新进游戏,这个卡住的玩家就基本流失了