换引擎,那就太暴力了。我想的是既然就差最后这一步了,就没有必要瞎折腾。
关键的是addref和decRef对于那些裹在对象中的不能自动释放的资源要怎么应用到呢?这就很矛盾啊,应该不是我一个人碰到这种情况,他们是怎么很好处理的呢?
我再说一遍我说的那个问题:
假如有一个图形如精灵,它上面加载要有图片,这个图片就做为texture2d加载到spriteFrame中了,这个striteframe又挂在sprite精灵对象上了。把sprite这个精灵对像化后,又挂在一个节点上,对吧。再把这个节点做为子节点,就这么一层层挂到一个管理用的根节点上,这些节点可不是一个是一组。把它们的引用存在一个管理用的数组中。现在我做的就是清空这个数组,从根节点上直接调用destroyAllChildren(),然后,再重新开始新游戏。可是发现并不是所有地方都释放了,还有不知道的位置没有,直到运行出现崩溃。这是这个问题。
注意, 你都destroy了, 但你的资源可能还在 assetManager._assets 的缓存里
建议你仔细看看文档。
2种情况
- 直接挂在场景Cocos 给你管理引用
- 你自己动态加载的资源,自己管理引用。
动态加载的资源可以用组件来管理引用,destroy的自动减少引用
跟随节点的生命周期来就可以了啊,动态加载的资源再回调里面addref并且记录下来,再节点destroy的时候遍历节点动态加载依赖过的资源逐个decRef就可以了,我是这么做的,现在的资源管理挺好用的了能粗狂也能精细看自己项目需求,2.4版本之前没有引用计数资源依赖都要自己维护那是真的难用