这里有两个思路,1.你可以在编辑器中对应场景选择自动释放资源
这样在加载新场景时不需要你手动去释放资源。
2.如果你想要手动控制的话
cc.loader.releaseAll();
cc.director.loadScene(“NewScene”);
这样用是有问题的,loadScene是会去异步下载新场景,中间肯定会有报错的。所以要等到场景下载完之后开始加载新场景时再释放上个场景资源
loadscene接口有两个回调,你可以在里面写释放上个场景的资源,但是注意,这个时候就不能用releaseAll了,因为,现在所有资源里面包含了新场景的资源和老场景的资源。所以只能用release方法释放老场景的依赖资源。
场景的依赖资源可以通过场景的属性dependAssets获得。
另外,注意一下,在loadscene这个函数的执行过程中,cc.director里面记录的当前场景会变成新场景,所以不能在
回调函数里面通过cc.director.getScene().dependAssets这种方式获得老场景的依赖资源,因为cc.director.getScene()已经是新场景了。必须在加载场景之前,先把老场景依赖资源缓存一下。应该可以这么写
var oldAsset = cc.director.getScene().dependAssets;
cc.director.loadScene('newscene',null,function(){
cc.loader.release(oldAsset);
})
注意,第二种思路是建立在新场景和老场景之间资源不共用的情况。如果有资源共用,这种释放也会把新场景用到的资源释放了,所以如果是这种情况的话,你可能需要将老场景的依赖资源和新场景的依赖资源进行比对,把不共用的资源释放掉,第一种思路中里提到的设置autorelease其实就是cocos帮忙做这件事。所以如果场景中有共用资源的话,还是设置autorelease为true吧,方便一些