资源管理器
导表
// 类别:{ // 一个类别下面会存在很多资源,他们拥有相同的路径,相同的类型
// path:通用路径,
// type:通用类型,
// list:具体资源名列表,
// },
资源管理器
// 构造函数 当这个类实例化的时候,会被系统调用
// 还有一个析构函数,当实例被释放的时候,会被系统调用
class CRes{
// 构造函数 当这个类实例化的时候,会被系统调用
// 还有一个析构函数,当实例被释放的时候,会被系统调用
constructor(){
this.loadNum = -1; // 记录当前仍在加载的资源类别数量
this._data = {}; // 资源数据存放位置
}
getLoadNum(){
return this.loadNum;
}
// 资源管理器启动加载入口,想要让管理器自动去加载资源,必须调用此函数
loadRes(){
this.loadNum = 0;
for (let key in TABLE){
this.loadNum++;
this.doLoad(key);
}
}
doLoad(key){
let info = TABLE[key];
let pathList = [];
for (let name of info.list){
pathList.push(info.path + name)
}
this._data[key] = {}
// 分帧加载
let func = ()=>{ // 从pathList中取5个进行加载
let tempList = pathList.splice(0, 3);
// cc.loader.loadRes(
// 路径,
// 类型
// 回调
// )
// cc.loader.loadResArray(
// 路径列表, // 要求全部都是完整路径,类型必须一致
// 类型,
// 回调
// )
cc.loader.loadResArray(
tempList,
info.type,
(err, resList)=>{
if (err){
cc.log(err);
return;
}
for (let res of resList){
this._data[key][res.name] = res;
}
if (pathList.length > 0){
func();
}
else{
this.loadNum--;
}
}
)
};
func();
}
getRes(key, name){
if (this._data[key]){
return this._data[key][name];
}
}
}
资源管理器知识点:
通过导表和插件的功能,将素材全部用一个全局变量存放,同时用了
cc.loader.loadResArray(),这个异步函数,实现了分帧加载的功能,
并且在此之上可以将loadNum加载的资源数以进度条的方式显示出来