主要是代码涉及到服务端等等 不太好直接提供.
我写下代码吧:
我有一个通用的加载界面,然后需要加载界面的时候调用如下代码:
UI.openUI("Loading/FightLoadingUI", (ui, uijs) => {
let onFinish = function () {
UI.closeUI();
UI.openUI("Fight/FightUI");
};
uijs.setLoad(onFinish);
GlobalRes.loadFight();
});
这段代码做这些事件:
1.显示loading界面
2.设置cc.loader.onProgress
3.load一些资源
设置load也是很按demo里面做法 没特别操作:
setLoad(callback) {
cc.loader.onProgress = null;
cc.loader.onProgress = (completedCount, totalCount, item) => {
if (totalCount == 0) {
totalCount = 1;
completedCount = 1;
cc.error(“没有加载任务”);
// return;
}
let progress = (completedCount / totalCount).toFixed(2);
if (this.progressBar) {
this.progressBar.progress = progress;
this.label.string = progress * 100 + "%";
} else {
cc.log("??");
}
if (!this.finish && item && item.uuid && completedCount == totalCount) {
// self.loadBar.fillRange = progress;
this.finish = true;
cc.loader.onProgress = null;
callback();
}
};
},
设置完loader之后就开始加载我需要的资源
loadFight() {
this.count = 0;
this.loadCount = 0;
cc.error("加载地图:" + DD.room.mapname);
GlobalRes.loadRes('Fight/maps/' + DD.room.type + "/" + DD.room.mapname, (err, data) => {
GlobalRes.tmxAsset = data;
cc.error("加载地图成功:" + DD.room.mapname);
// this.tiledMap.tmxAsset = data;
// this.init2();
});
GlobalRes.loadRes("Fight/sounds/moving", (err, data) => {
GlobalRes.moving = data;//移动音效
});
GlobalRes.loadRes("Fight/sounds/nmoving", (err, data) => {
GlobalRes.nmoving = data;//移动音效
});
// GlobalRes.playEffect("Fight/sounds/nmoving");
GlobalRes.loadRes("Fight/GameOverUI", (err, data) => { //加载战斗结果面板
GlobalRes.GameOverUIPrefab = data;
});
}
GlobalRes.loadRes这个方法其实就是 cc.loader.loadRes 封装一下做各日志
以上 在加载第一次资源的时候没任何问题, 但是如果资源加载过了 再次加载
cc.loader.onProgress 就会传入count = 0
我猜测就是因为资源被缓存 导致第二次加载没有走加载逻辑.