import { _decorator, Asset, AssetManager, assetManager, Component, Node, Prefab, sp, SpriteFrame } from 'cc';
const { ccclass, property } = _decorator;
export const loadingRes = new class {
public loadSpriteFrame(bundleName: string, url: string): Promise<SpriteFrame> {
return this._load(bundleName, SpriteFrame, url);
}
public loadSpine(bundleName: string, url: string): Promise<sp.SkeletonData> {
return this._load(bundleName, sp.SkeletonData, url);
}
public loadPrefab(bundleName: string, url: string): Promise<Prefab> {
return this._load(bundleName, Prefab, url);
}
private async _load<T extends typeof Asset>(bundleName: string, type: T, url: string): Promise<InstanceType<T>> {
let bundle = assetManager.getBundle(bundleName);
if (!bundle) {
await this.loadBundleAsync(bundleName);
bundle = assetManager.getBundle(bundleName);
}
return new Promise<InstanceType<T>>((resolve, reject) => {
bundle.load(url, type, (err, asset) => {
if (err) {
console.error(err);
return;
}
resolve(asset as InstanceType<T>);
});
})
}
private loadBundleAsync(bundleName: string): Promise<AssetManager.Bundle> {
return new Promise((resolve, reject) => {
assetManager.loadBundle(bundleName, (err, bundle) => {
if(err)
{
console.error(err);
return;
}
resolve(bundle);
});
});
}
}
使用例子
async test(){
let testnode=instantiate(await loadingRes.loadPrefab('atlas_equip', 'prefab/Label'))
let sp=await loadingRes.loadSpriteFrame('atlas_equip', 'atlas_equip/icon_zhuanbei_shoe_1')
console.log("🚀 ~ Scene ~ test ~ sp:", sp)
testnode.getComponent(Sprite).spriteFrame=sp;
this.node.addChild(testnode);
}