资源的引用计数是1,但是资源内容被销毁了

  • Creator 版本:3.7.3

  • 目标平台:小游戏

  • 重现方式:

  • 首个报错:
    企业微信截图_17085000096684

  • 之前哪个版本是正常的:

  • 手机型号:

  • 手机浏览器:

  • 编辑器操作系统:

  • 重现概率:

游戏逻辑里没有调用bundle.release,只是调用decRef这个而已,这个是资源是spine资源(游戏特效),会同时创建多个 进行 加载资源、加引用、解引用的步骤

现在报错的情况是,渲染需要资源内容,但是资源已经被销毁了,但引用计数是1,怎么会被销毁呢,有查过是不是临界引用的问题,但看了引擎源码,对临界问题是有进行判断的,急急,已经4天了,各种都查了

求助官方大大

image

和这个好像有点像

贴图或者材质球被释放了

报错的是一样的,但我是AssetManager.assets也没有资源对象了

嗯嗯,就是资源被释放,但不知道哪里释放的,明明引用计数还是1的

问题找到了,是时序问题,load 用到了promise,频繁进行decRef触发释放资源以及load,一帧内在引擎层加载完资源回调业务层时,由于业务层的addRef并不是在回调函数执行的,而是回调函数执行resolve,在then里进行addRef,而resolve并不是即时执行,导致没有即时进行addRef,在帧内还执行了资源的释放(_freeAssets),而后再去执行那个promise的then内方法,此时资源的objFlags是4,不为0

引擎的 asset的isValid 加上判断objFlags 会不会更好呢

有个全局的 isValid,传入 true 会判断 _objFlags