Cocos Creator v2.1.2 测试版发布帖(07/16 更新 rc.7)

正式版是这周发布嘛?

是的 12345

最近遇到了几个经常出现的bug。

第一,Prefab重命名,经常无效,编辑器里显示名字是更改之后的了,可是Finder里还是老的名字,这时我只能重新编辑器,一天要重启好多次。

第二,报错,某一个Prefab打不开了。。

Error: [AssetLibrary] loading JSON or dependencies failed: undefined

我也看不出来哪里错了,目前正在找方法试图解决。

cc.loader.getDependsRecursively释放预制体资源的时候会报警告
“res/import/28/2874f8dd-416c-4440-81b7-555975426e93.json” was released but maybe still referenced by “res/import/6f/6f801092-0c37-4f30-89ef-c8d960825b36.json” (6fgBCSDDdPMInvyNlggls2)


effect 被其它材质复用了,不能完全释放喔,最好手动排除

我这个预制体没有其他依赖,就是几张图片

我这里也出现了,原来在2.0.10,1.9.3 正常的资源释放逻辑,在2.1.2会出问题。

大概原因如下,现在的Sprite都改用了材质。

加载Sprite A,将其依赖引用+1 值为1
SpriteA Destroy, 将期依赖引用-1 值为0

此时对引用为0的依赖 调用 cc.loader.release

此时会警告 例似这样的语句:“res/import/02/0275e94c-56a7-410f-bd1a-fc7483f7d14a.json” was released but maybe still referenced by “res/import/2a/2a296057-247c-4a1c-bbeb-0548b6c98650.json” (2a296057-247c-4a1c-bbeb-0548b6c98650)

去Library查看,发现这个会释放的依赖是 内置材置 的依赖。 内置材质应该是引擎自动加载,存在于内存当中,而开发者的内存管理逻辑没有主动为 引擎自动加载的资源 引用加1.所以造成这个问题。

解决办法:
1.引擎提供 一个接口,开发者可以获取 引擎自动加载资源的所有依赖 开发者内存管理逻辑主动为这些依赖引用+1
2.引擎提供一个接口,开发者去记录依赖时,判断此依赖存在于引擎自动加载的资源当中。 如果是,则不处理
3.引擎 cc.loader.release 自行实现,不对引擎内置资源做处理

3赞

感谢大家的热心反馈。2.1.2 正式版已经发布了。由于人力、版本稳定性的限制,很多细节问题无法 100% 跟进,如有需要,大家可以继续发帖反馈,我们会有专人跟进。本帖已经很长,难以跟踪问题,先行关闭。