cocoscreator3.X的底层重启是不是有问题,卡了2天了

版本:3.6.0
先是遇到线上一个报错:
TypeError: Cannot read properties of null (reading ‘0’)
at Object.updateUVs (…/cocos-js/cc.8b346.js:1:1068082)
at Object.updateRenderData (…/cocos-js/cc.8b346.js:1:1066801)
at i.updateRenderer (…/cocos-js/cc.8b346.js:1:927077)
at e.updateAllDirtyRenderers (…/cocos-js/cc.8b346.js:1:783561)
at i.tick (…/cocos-js/cc.8b346.js:1:788129)
at n._updateCallback (…/cocos-js/cc.8b346.js:1:796827)
at e (…/cocos-js/cc.8b346.js:1:781889)
这么一看堆栈,看不出问题,经过反复追踪日志,在测试服重现了。
我在测试服发现:
在重启cocos环境之前,也就是game.restart(),加载某个资源,略微大,比如某个游戏的主场景,然后加载启动后,就game.restart(),重启后,加载完了,这个时候去引用就报错了。而且这个是在加载资源的某个时刻重启才会出来,为了更好解决这个问题。尝试做个demo,
但是demo不好做,勉强做了一个类似的,但是bug 堆栈不一样,但是我觉得问题应该算一类问题。
下面这个报错也是重启之前加载了资源,通过设定
image
当时间小于400,大于800都不会报错。在这个中间范围比如650,就报错 。

这个引擎底层不知道做了什么事哦。官方大佬赶紧出来解决一下。
我的想法是重启游戏了,如果当前有什么加载资源的队列,有没有接口提供停止resources.load呢。
demo:
demo.zip (2.1 MB)

刚测试了下,时间要改到500就会报错

restart 会调用 releaseAll,你这边加载的贴图应该是被释放了

确认是被释放的。而且是概率性触发,这个setTimeout的时间,都是定好某一刻才会出来,麻烦修复一下吧。我想不到任何解决办法了,卡了2天。现在只能规避处理,加载的时候不让游戏重启了。

如果有个资源在restart前被加载了,而且还没有load完,restart后,应该不要让他load完,里面的资源有概率被释放。或者restart了,那么检查一下load队列清空,如果已经执行的,不要让他有脏数据出来,目前发现从assetManager.resources.get();拿到了脏数据。 :innocent: