creator运行时错误

  • Creator 版本:v2.0.10

  • 目标平台: 所有

  • 详细报错信息,包含调用堆栈:

  • 重现方式:加载的资源释放后会出现

  • 出现概率:经常

引擎组的大拿,这个是不是引擎本身的问题?一出现这个问题就完全卡死,瞬间几千个日志输出!完全没法用,能给个说法么?

估计不是引擎组的问题,可以关注最开始出现bug附近的日志。一般是一个小问题,导致不停的打日志。

附近没有其他错误日志,就是动态图片资源释放之后,出现这个问题

正在运行的资源被释放了,如果你释放一个资源,需要自己保证资源没有在使用中,目前引擎是没有判断是否正在被使用,自己排查下资源使用情况,优化下逻辑 …

我确信肯定是没有用的了,cc.spriteFrame相关的Sprite Node也已经RemoveFromParent了,一个孤立的Node,但还是会出现。

换到2.1.3之后,就变成这样:

怎么复现的,可以给个demo吗?我们排查下~

复现操作比较简单:先通过cc.loader.loadRes加载一张图片,然后cc.loader.releaseRes释放它,反复进行这样的操作,然后就出现了。我的跟踪体验是:cc.loader里面assetManager里资源被释放了,但是似乎再次loadRes的时候调用一个loadItem里面的时候,似乎有缓存,导致重新加载的c.spriteFrame对象是原来的,但是里面的texture确实null,然后问题就出现了。

后入调用cc.loader.loadRes(imgUrl,cc.SpriteFrame, function(err,sp){
if(!err){
//use sp;在这里sp的texture还非null,但是过一段时间之后,在主循环进行render的时候,突然就为null了,不知道啥时候做了清理。这种情况发生在cc.loader.loadRes多次调用一个曾经释放过的图片之后。
}
});

cc.loader.loadRes 重复加载同一个资源,是可能出现的,后面版本应该是优化了的,可以试试2.1.3版本。

2.1.3版本也一样,最后cc.spriteFrame对象也是被销毁了,然后出现那个不停的无法访问packable的错误:

cc.loadRes应该支持释放和重新加载吧?

麻烦参考下文档,资源管理还是需要自己理解下~
https://docs.cocos.com/creator/manual/zh/scripting/load-assets.html#资源的依赖和释放

你贴的报错信息,可以抽出个demo吗?应该也是资源被错误释放了。