微信小游戏加载进度与切换场景黑屏一种方案

测试在cocos2.0.5
直接用cc.director.loadScene在安卓微信小游戏上会黑一下,改成cc.director.runScene就好多了。

` 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(debug){
        this.loadResSecen(view, sucCallback, errCallback)
    }else{
        cc.director.loadScene(view);
    }
},

//hack 
loadResSecen(sceneName, sucCallback, errCallback) {
    var info = cc.director._getSceneUuid(sceneName);

    cc.loader.load({ uuid: info.uuid, type: 'uuid' }, (completedCount, totalCount) => {
        // em.eventNode.emit(EVENT_TYPE.LOAD_SCENE, {
        //     completedCount, totalCount, sceneName   //加载进度, 另一个边监听LOAD_SCEN消息获取进度值
        // })
    }, (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:
testAndr.rar (532.8 KB)

loadResSecen scene拼错了
好像只是提前加载了而已,对于很小的游戏可以,大型一点点的,安卓7内存早崩了,直接黑屏

微信小游戏内不仅是黑屏,不黑的话,这个预加载的时候其实也是半卡死状态,只是显示不是黑的,但是是没响应的。。。最根本的原因是引擎的 cc.instantiate 部分写的太烂,微信下面json性能很差。只有官方大改最靠谱,自己只能少许优化

2.x 还有 cc.director.runScene ?

mark