1.资源AssetBundle包(简称ab包):
每个文件夹都可以设置成ab包,在creator编辑器中这样设置:
两个默认的资源Ab包;
1: 我们编辑器场景中用到的的资源:都会被打入到main ab包里面;
2: resources文件夹(老版本代码加载的资源都放在这里),cocos 为了兼容以前的,内置一个resources的文件夹的ab包; 兼容以前 resource 代码加载;creator3.x后的版本不要把文件夹命名为resources。
asset-manager.ts下代码:
/**
* 内置 main 包
*/
public get main (): Bundle | null {
return bundles.get(BuiltinBundleName.MAIN) || null;
}
/**
* 内置 resources 包
*/
public get resources (): Bundle | null {
return bundles.get(BuiltinBundleName.RESOURCES) || null;
}
/**
2.资源的加载和释放:
文件夹被设置为ab包后,这个文件夹下的资源都在这个ab包里面,我们要先加载ab包(assetManager.loadBundle),然后通过加载好的Bundle对象来加载包中资源:
export class GameApp extends Component {
start () {
var itemSprite: Sprite = find("Canvas/Item")?.getComponent(Sprite) as Sprite;
// 加载ab包:异步加载,加载好会回调你的函数;
assetManager.loadBundle("GUI", (err, ab: AssetManager.Bundle)=> {
// 加载好了GUI包;
// 下面加载GUI中的图集资源
// 第一个参数是资源路径:是从我们的资源包的路径下开始
ab.load("test/airplane", SpriteAtlas, (err, atlas: SpriteAtlas)=>{
if(err) {
console.log(err);
return;
}
// console.log(atlas);
var sp: SpriteFrame = atlas.getSpriteFrame("Jishen_W0") as SpriteFrame;
itemSprite.spriteFrame = sp;
sp.addRef(); //releaseUnusedAssets接口会释放引用计数为0的资源
});
// 加载我们的声音文件
ab.load("CK_attack1", AudioClip, (err, clip:AudioClip)=>{
if(err) {
console.log(err);
return;
}
var as: AudioSource = this.getComponent(AudioSource) as AudioSource;
as.clip = clip;
clip.addRef(); // 引用计数来判断,这个资源是否在使用;
as.loop = true;
as.play();
});
// 释放ab包, 不会释放从ab包里面加载好的资源;
// assetManager.removeBundle(ab);
});
this.scheduleOnce(()=>{
// var ab = assetManager.getBundle("GUI");
// ab?.releaseAll(); // 释放所有资源
// ab?.releaseUnusedAssets(); // 释放没有用的资源, 引用计数
/*
var ab = assetManager.getBundle("GUI");
ab?.release("test/airplane"); // 基于ab包释放单个资源
ab?.release("CK_attack1");
assetManager.removeBundle(ab as AssetManager.Bundle);
*/
// 释放ab包, 不会释放从ab包里面加载好的资源;
var ab: AssetManager.Bundle | null = assetManager.getBundle("GUI");
assetManager.removeBundle(ab as AssetManager.Bundle);
// assetManager.releaseAsset();
// assetManager.releaseUnusedAssets();
// assetManager.releaseAll();
}, 10);
}
}
|