发现上面的方法如果是微信小游戏中在切换场景可能会出现黑屏的问题,所以带来了如下的解决办法
下面的方法在于给大家提供一种安卓与苹果加载会给出真是的进度同时,也不会出现加载黑屏的问题
goA(){
this.goView(‘StartScene’)//场景1的名字 切换场景直接调取这个方法
},
goB(){
this.goView('GameScene')//场景2的名字 切换场景直接调取这个方法
},
goView(view){
var onBeforeLoadScene = ()=>{};
var injectLaunched = ()=>{};
var sucCallback = function (scene) {
cc.director.runScene(scene, onBeforeLoadScene, injectLaunched)
}.bind(this);
//loadScene在微信安卓下,会跳转黑屏
var errCallback = function () {
cc.director.loadScene(view, injectLaunched);
}.bind(this);
if(true){
this.loadResSecen(view, sucCallback, errCallback)
}else{
cc.director.loadScene(view);
}
},
//hack
loadResSecen(sceneName, sucCallback, errCallback) {
var progressBar_ = cc.find("Canvas/progressBar").getComponent(cc.ProgressBar);
var info = cc.director._getSceneUuid(sceneName);
cc.loader.load({ uuid: info.uuid, type: 'uuid' }, (completedCount, totalCount) => {
this.loading_text.string =""
var num_ = (100 * completedCount / totalCount).toFixed(2);;
console.log("家在进度==",num_ );
}, (error, sceneAsset) => {
if (error) {
console.log(error)
errCallback && errCallback();
return;
}
else {
//跟引擎 cc.AssetLibrary.loadAsset一致。 设置 dependAssets, isScene && cc.loader.removeItem(key)
var key = cc.loader._getReferenceKey(info.uuid);
sceneAsset.scene.dependAssets = cc.loader.getDependsRecursively(key);
if (sceneAsset instanceof cc.SceneAsset) {
(sceneAsset.constructor === cc.SceneAsset || sceneAsset instanceof cc.Scene) && cc.loader.removeItem(key);
var scene = sceneAsset.scene;
scene._id = sceneAsset._uuid;
scene._name = sceneAsset._name;
sucCallback(scene);
return;
}
else {
errCallback && errCallback();
}
}
})
},
上满的这个方法也是来自论坛的一位大佬 地址的地址的链接 里面有demo可以去下载https://forum.cocos.com/t/topic/69729