分享关于场景进度条的显示的方法 场景切换加载黑屏处理办法

作为新人,发现场景加载进度条写不出来。不过最后还是找到了。废话不多说

      cc.loader.onProgress = (completedCount, totalCount, item) => { //进度回调
            var progress_ = (100 * completedCount / totalCount).toFixed(2);
            console.log("进度的显示=",progress_);
        };
        cc.director.loadScene("StartScene");//--StartScene是需要加载的场景的名字 

剩下的添加上富文本的显示与进度条的组件就好了。需要注意的是:progress_ 变量是整数 而进度条组件的progress的数单浮点型-也就是小数–请大家注意

发现上面的方法如果是微信小游戏中在切换场景可能会出现黑屏的问题,所以带来了如下的解决办法
下面的方法在于给大家提供一种安卓与苹果加载会给出真是的进度同时,也不会出现加载黑屏的问题
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

上面的两种场景加载方案只在为大家提供一个真是的进度条显示 方案一安卓会出现黑屏,方案二不会加载黑屏
如果大家在加载中不需要用到真是的进度条,而是显示一个不会卡顿的动画,从而进行过度场景。
就可以使用第三种方案–也就是这一种方案
* 1. cc.director.preloadScene(“GameScene”, function () {
* 2. cc.log("–loading–GameScene场景预加载成功");
* 3. cc.director.loadScene(“GameScene”);
* 4. });

思路是进度一个将在loading场景中我们需要进行的是的先预加载需要进入的场景,等加载完毕了,再进行场景的切换

谢谢分享