求教图集释放的正确姿势

Cocos Creator 1.5.2 正式版,有一个动画节点,有很多个动画剪辑(animationClip),全部是代码动态创建的,这些动画剪辑都是帧动画并且引用的同一张图集,1.5.2之前(还是1.4.x版本我忘了)我是这样释放的:

                //释放精灵帧,精灵帧也是在同一个图集当中
                cc.loader.releaseAsset(this.wearNode.getComponent(cc.Sprite).spriteFrame);

                //获取动画剪辑列表
                var clips = this.wearNode.getComponent(cc.Animation)._clips;

                for(var i = 0; i < clips.length; i++){
                     //获取动画剪辑引用的资源并释放
                    var temp = cc.loader.getDependsRecursively(clips[i]);
                    cc.loader.release(temp);
                }
                //删除所有动画剪辑
                clips.splice(0, clips.length);

                //释放图集
                cc.loader.releaseRes("atlas/" + this._wearName, cc.SpriteAtlas);
                break;

但是升级到1.5.2正式版之后,以上代码会提示

unknown asset type cc_AnimationClip

我跟踪看了下,好像是因为animationClip没有uuid导致的,并且我调用了释放图集的操作,但是动画依旧能够正常播放,所以特来请教各位大神,我该怎么做才能正确释放掉图集资源,谢谢

panda老师告诉我要 @jjyinkailejj :joy:

1赞

代码动态创建的资源不需要释放(目前也没办法释放),你只要释放通过 loader 加载的资源即可。
之后 (2.0?)会统一这部分操作,避免这种报错发生。

动画剪辑里的精灵帧是引用还是拷贝?我上面有释放图集的操作,就是通过loader动态加载的图集,但是释放图集之后动画没有影响,以前释放后动画没有纹理会显示黑块:sweat_smile:

js 只能引用,无法拷贝。释放图集后,动画没有影响可能是没释放成功。不过就算没有影响也没事,不会有内存泄露。

我试了下,cc.loader.releaseRes(“atlas/” + this._wearName, cc.SpriteAtlas);释放图集后,图集资源还存在loader缓存里,我要怎么做才能彻底施放这张图集?因为是换装游戏,如果图集不能释放的话,换装多次后估计内存就爆了:joy:

不是图集还在 loader 里,而是图集依赖的 SpriteFrame 还在 loader 里。要释放依赖的资源请使用 cc.loader.getDependsRecursively

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

我就说图集有许多了讨论的内容了