cc.loader.releaseRes后无法再次加载该资源?

如果是这样岂不是很bug

eg
脚本中动态加载图片精灵icon/cat
cc.loader.loadRes(“icon/cat” , cc.SpriteFrame , funtion(){

node.spriteFrame = sp //略

})
大概这样,node加载了小猫图片纹理,显示正常!

之后destroy掉node
再做cc.loader.releaseRes(“icon/cat”)
(ps.如果反过来这两步,会看到小猫图片变成黑色矩形)

问题是:
无法再次脚本加载小猫纹理!永远都是黑色矩形

我需要释放一部分纹理资源,但随后肯定还可能要用呀

releaseRes 只是释放了纹理,没有释放 SpriteFrame
结果就是你重新加载 SpriteFrame 时,已经有了所以不会重新加载。但是原来的 SpriteFrame 指向的纹理又被释放了……
所以就出错啦

建议你试试
cc.loader.releaseRes(“icon/cat”, cc.SpriteFrame);

2赞

我试了发现和你说的一样
cc.loader.releaseRes(“icon/cat”);
cc.loader.releaseRes(“icon/cat”, cc.SpriteFrame);
这两步是不同的操作
那为了节省内存是不是我应该两句都调用?

这是为了保持统一,你 loadRes 传(“icon/cat” , cc.SpriteFrame),则 releaseRes 一样要传(“icon/cat” , cc.SpriteFrame)

建议第二个类型参数总是写出来,不要省略。一方面防止出错,同时也让代码意图更清晰。

cc.loader.releaseRes(“icon/cat”, cc.Texture2D);
cc.loader.releaseRes(“icon/cat”, cc.SpriteFrame);

你要释放哪个就调用哪个。

1赞

明白了 十分感谢

Texture2D 必须要释放?

看你还要不要用,不用就释放

我最近也遇到了类似问题,但是我没有释放过资源,也变黑块儿了,这是我发的帖子链接
http://forum.cocos.com/t/topic/59880?u=wht396138

我切换场景后,想把场景对应的resources/下的一个图片资源子目录全部释放掉,怎么调用cc.loader.releaseResDir没用呢。小游戏内存还是没有降低。