Creator版本:2.0.5
平台:玩一玩
描述:
1,我们的场景切换时中间加了一个过渡场景,代码如下,这个LoadingScene的工作基本上就是preload下一个场景,然后再进去。
2,发布到线上以后,我们收到部分玩家反馈,会卡在这个LoadingScene 进不去下一个场景
3,联系上这些玩家以后,他们表示,之前能玩,能进去,是突然进不去了,他们并不是第一次就进不去,而且是前天能进去,今天就进不去了,在我映像中,如果一个场景进去过,它所依赖的远程资源,应该都已经下载到本地了,所以我非常纳闷为什么之后又进不去了,第一次进不去可能是网络原因导致远程资源下载不成功
4,根据我自己的测试,因为我的的场景没有设置延迟加载,所以如果下一个要加载的目标场景,如果图片加载不成功,或场景json文件出错或加载不成功都可能导致这种情况
5,我们的大部分资源都放在远程服务器
我的问题是:
1,这种问题线上版本如何精确定位?有什么办法可以收集到报错信息,因为我们自己无法重现,又不可能拿玩家的手机来测试
2,场景loading过程中失败,无法进入下一个场景,都有哪些原因会导致这种情况,我自己分析的可能不全面
怕帖子石沉大海,不好意思 @panda @jare @Knox @一下三位大佬
cc.Class({
extends: cc.Component,
properties: {
tiplabel: cc.Label,
progressBar: cc.ProgressBar,
bg: cc.Node
},
onLoad() {
this.progressBar.progress = 0
if (cc.winSize.height > 1280) {
this.bg.scale = cc.winSize.height / 1280
}
this.tiplabel.string = GlobalVar.dataMgr.getTips()
if (cc.sys.platform === cc.sys.QQ_PLAY) { // 玩一玩当前版本会卡住,要等qq升级到7.9才修复,先让进度条跑一下
this.progressBar.progress = 0.1 + Math.random() * 0.2
}
if (GlobalVar.hasBanner) {
GlobalVar.adsMgr.hideBanner()
}
},
start() {
this.m_nextScene = GlobalVar.SceneTo || "Main"
this.m_simulatorSpeed = 1.0
this.m_curProgress = 0.1
var onProgress = (completedCount, totalCount, item) => { //进度回调
//cc.log("LoadingScene onProgress", completedCount, totalCount)
this.m_updateTimeTotal = 0
let percent = completedCount / totalCount
this.m_curProgress = percent
}
cc.director.preloadScene(this.m_nextScene, onProgress, () => {
})
},
update(dt) {//使得进度条更加顺滑,连贯
if (this.m_curProgress) {
if (this.progressBar.progress < this.m_curProgress) {
this.progressBar.progress += dt * this.m_simulatorSpeed
}
else if (this.progressBar.progress >= 1 && !this.m_jumpToOtherScene) {
GlobalVar.alreadyLoadedScenesMap[this.m_nextScene] = true
cc.director.loadScene(this.m_nextScene)
this.m_jumpToOtherScene = true
}
}
},
onDestroy() {
if (GlobalVar.hasBanner) {
GlobalVar.adsMgr.showBanner()
}
}
});