import Time from "../tools/Time"; const { ccclass } = cc._decorator; @ccclass export default class PrefabManager extends cc.Component { static _ins: PrefabManager = null; Destroy() { this.destroy(); PrefabManager.loaded = false; PrefabManager.otherPrefabDic = {}; PrefabManager.othersLoaded = false; PrefabManager._ins = null; } private static loaded: boolean = false; //是否已加载成功 private static uiDic = {}; //字典 private static uiUrlKeys: string[] = []; //UI界面资源Url数组 public static otherPrefabDic = {}; //其余预制体 红包... ... public static othersLoaded: boolean = false; //水果资源加载是否完成 private loadUiAry: string[] = [ //"ui/ForwardPanel", //"ui/EffectPanel", //"ui/RedbagPanel", //"ui/RedbagGpPanel" ]; static get Loaded() { //return PrefabManager.loaded && PrefabManager.othersLoaded; return PrefabManager.loaded; } onLoad() { PrefabManager._ins = this; console.log("PrefabManager:onLoad"); this.LoadUiPrefabs(); //this.LoadOtherPrefabs(); //this.LoadAudio(); // cc.audioEngine.preload("audios/hit",()=>{ // console.log("audio loaded"); // }); // cc.loader.loadRes('audios/' + AudioType.hit, (err, cip) => { // console.log("hit audio loaded"); // }) } /**加载UI资源*/ LoadUiPrefabs() { //PrefabManager.loaded = true; //return; // console.log("PrefabManager:onLoad"); console.log("--------Start Load PrefabUI"); PrefabManager.loaded = true; console.log("-->Loading PrefabManager load ok!"); return; //放到 游戏中动态加载 //cc.loader.loadResArray(this.loadUiAry, cc.Prefab, (err, objects) => { cc.loader.loadResDir("ui", cc.Prefab, (err, objects, urls) => { for (let i = 0; i < objects.length; i++) { let key = urls[i]; console.log(urls[i]); PrefabManager.uiUrlKeys.push(key); PrefabManager.uiDic[key] = objects[i]; } PrefabManager.WaitLoaded(); }); } /** * 等待Prefab资源加载完成 */ static async WaitLoaded() { console.log("WaitLoaded"); await Time.WaitForSeconds(cc.director.getDeltaTime());//cc.director.getDeltaTime()*5 PrefabManager.loaded = true; console.log("-->Loading PrefabManager load ok!"); //首次进入场景 加载当前解锁关卡 //console.log("是否加载完成:"+PrefabManager.Loaded+"---"+GameData.Instance.currentLevelId); //GameFacade.Instance.LoadedFinished(); //GameFacade.Instance.UIMng = UIManager.Instance; //GameFacade.Instance.LoadLevel(GameData.Instance.currentLevelId); //GameFacade.Instance.mainPanel = UIManager.Instance.GetPanel(PanelType.MainPanel); //GameFacade.Instance.mainPanel.OnEnter(); //AdManager.Instance.signPanel.CheckSign(); } /** * 加载其他预制体资源 */ LoadOtherPrefabs() { cc.loader.loadResDir("prefab/other", cc.Prefab, (err, objects, urls) => { for (let i = 0; i < objects.length; i++) { let key = urls[i]; PrefabManager.otherPrefabDic[key] = objects[i]; } console.log("Loading PrefabManager other loaded"); PrefabManager.othersLoaded = true; }); } /** * 获取Prefab */ public static LoadUi(key: string): cc.Prefab { return this.uiDic[key]; } /**加载页面*/ public static LoadPanel(key: string): cc.Node { console.log("Prefab Url:" + key); return cc.instantiate(this.LoadUi(key)); } /**异步加载页面*/ public static LoadPanelAsync(key: string, cb: any = null) { if (!PrefabManager.uiDic[key]) { cc.loader.loadRes(key, cc.Prefab, (error, item) => { PrefabManager.uiDic[key] = item; let panel = cc.instantiate(item); if (cb) { cb(panel); } }); } else { let panel = cc.instantiate(this.LoadUi(key)); if (cb) { cb(panel); } } } /**获取预制体*/ public static GetPrefab(name: string): cc.Node { if (this.otherPrefabDic["prefab/other/" + name]) { return cc.instantiate(this.otherPrefabDic["prefab/other/" + name]); } else { console.log("Prefab other not have:", this.otherPrefabDic["prefab/other/" + name]); return null; } } }