你这预制体被回调时,如果预制体里面有sprite组件,那么sprite组件上的纹理是异步load 完成的,此时如果你直接释放,那么load回调时就会报错。
我先试一试延后释放,你们使用的时候,如果快速的去加载和销毁单个预制体会出现问题吗。 而且这个预制体,不算特别大,只能是中等大小,大概有100-200来个资源 还有一个因素是,我们所有的图片资源都使用了 cocos的自动图集
我没用贴主的这套,自己实现了一套不过内核都差不多。 引用计数。不过我加载和销毁 都放到了,director的行为事件中延后处理,并且保证释放时不存在任何异步加载的行为。所以不会出现贴图丢失错误。
不存在任何异步加载行为? 你怎么做到的,求指教,我们的程序理论上来讲做不到, 加载这个页面他销毁后,很有可能又去点击加载下一个页面,然后又立马关闭销毁下一个页面,然后又回来加载这个,如果速度快,就能出现问题。 或者需要对资源加载底层做一些修改了。
肯定可以实现啊,你都能知道用户触发异步的行为了。修改下释放资源的时机。保证释放时用户没有发起任何异步加载请求。。你们只要保证在加载下一个异步资源时,当前关联引用的资源已经被释放了,那么cc.loader就会重新加载的。
mark!
类似这样的问题,我在UIManager里面解决,把UI标记为cache
简单的方法是Loading计数,开始加载+1,加载结束-1,所有释放全部进队列,判断计数为0才执行释放队列
请问大佬要是处理资源释放的时候,如何标记cocos creator 系统的资源,比如mask,按钮贴图那种不释放,否则会还出现异常,要怎么规避
你更新一下github,这个问题已经不存在了
mark~
节点真正销毁在下一帧,如果你这时候请求了和销毁节点相同依赖的资源很可能因为资源问题报错。creator就是这么让人蛋疼
质量贴,收藏
mark,牛
所以可以在上个节点销毁生命周期调用onDestroy后在创建新的保证不出错
我也是参考了楼主的做法自己设计一个管理器,请求资源和释放资源都在一个任务队列里面只有上个任务完成才会执行下个任务,从而保证不会因为资源延迟加载和释放报错
你怎么判断销毁的任务是否完成了呢,我们的各个模块都是节点式的, 我销毁一个模块,需要立刻打开下一个模块, 如果要等上一个模块销毁完,对下一个模块的打开速度,也会有一定的影响。
大佬,我想请教一下,既然能够通过 getDependsRecursively 获取所有的资源引用,那么就能用一个全局的表来计数,计数为0 就可以释放,我游戏就一个场景,其他的全是prefab,每次加载获取 getDependsRecursively 然后计数,在destory() 去看哪个计数为0 。然后释放,可行不。
这个做法的代价有点大了,不同资源的加载其实并不冲突,用我说的那种:加载计数,计数==0才执行释放,你的并行度会高很多
不知道你写出来会是怎样,感觉效率不会那么高,现在github的最新版本是可以避免重复递归的