天天看點

Cocos 資料總管資料總管

資料總管

導表

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

繼續閱讀