cc.SpriteAtlas 的资源需要如何释放, 才能彻底

cc.loader.loadRes("test assets/sheep", cc.SpriteAtlas, function (err, atlas) {
    var frame = atlas.getSpriteFrame('sheep_down_0');
    sprite.spriteFrame = frame;
});


cc.loader.releaseRes("test assets/sheep");   //这样就可以了? 内存中的贴图会随着node的destroy 自动释放?

如例子 sheep

贴图不会诶,贴图需要你另外释放。用

var deps = cc.loader.getDependsRecursively(atlas);
cc.loader.release(deps);

1赞

再问一句,2个node使用同一个atlas(并且是相同的图片),是一份内存还是两份内存,

就是说,比如一个阶段是多个node同时使用aaa, 我可以等这个阶段结束后,一起释放多个node的贴图,并且释放aaa图集,还是每个node OnDestroy的时候就释放该node的贴图, 那种占用更小的内存?

是一份。

再问一个, 如果我prefab是通过拖拽产生的, 并没有通过脚本去load atlas, 如何得到atlas(这样才能getDependsRecursively)

拖拽的不能这样释放。
只有动态加载的才能动态释放

拖拽的 怎么释放,谢谢

一样的方法释放

现在直接拖拽进场景的预制体,可以通过cc.loader.release()去释放了?

你能获取到资源就能释放

拖拽产生prefab 是获取不了atlas的, 需要手动记下自己atlas 的名字, 再load一次?还是这个prefab会自动释放?
知道了, 这样
var deps = cc.loader.getDependsRecursively(‘prefabs/sample’);
cc.loader.release(deps);

但是如果不是prefab, 如果是场景用了atlas的图片, 该怎么释放呢

场景不会用到 atlas,只会用到 atlas 所用的 SpriteFrame 的纹理。你从 SpriteFrame.getTexture() 直接释放就行。

场景的SpriteFrame 不能自动切换场景的时候释放么,每个node 去遍历获取texture不是很麻烦?

如果我知道altas的名字是否可以直接
var deps = cc.loader.getDependsRecursively(‘path/atlasname’);
cc.loader.release(deps);

有人知道么

场景的可以,在场景上勾选自动释放即可。最好看看文档。

http://docs.cocos.com/creator/manual/zh/asset-workflow/scene-managing.html#修改场景资源自动释放策略

http://docs.cocos.com/creator/manual/zh/scripting/load-assets.html