資料總管
導表
// 類别:{ // 一個類别下面會存在很多資源,他們擁有相同的路徑,相同的類型
// 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加載的資源數以進度條的方式顯示出來