有時(shí)候挫以,當(dāng)我們場景上掛載的資源過多時(shí)孤个,我們使用cc.director.loadScene切換場景時(shí)會等一段時(shí)間才會切換過去陋率,這對游戲的體驗(yàn)是相當(dāng)不好的驮宴。所以我們可以使用cc.director.preloadScene來進(jìn)行預(yù)加載逮刨,如:
cc.director.preloadScene("sceneName", function () {
cc.director.loadScene("sceneName");
});
同時(shí)搭載一個加載進(jìn)度條來實(shí)現(xiàn)顯示加載進(jìn)度,優(yōu)化游戲體驗(yàn):
二幻赚、 如何獲取加載時(shí)的進(jìn)度禀忆?
1. Cocos Creator 2.0版本之前
在Cocos creator 2.0版本之前,我們可以使用下面這樣的方法:
cc.loader.onProgress = function (completedCount, totalCount, item){
//先開監(jiān)聽
this.loading.progress = completedCount/totalCount;
this.loadLabel.string = Math.floor(completedCount/totalCount * 100) + "%";
}.bind(this);
cc.director.preloadScene("sceneName", function () {
cc.log("加載成功");
});
備注:loading就是你在腳本中綁定的進(jìn)度條組件落恼。
2. Cocos Creator 2.0版本之后
Cocos creator升級到2.0版本后箩退,onProgress貌似就無法使用了,所以上述那個方法無法獲取到加載進(jìn)度佳谦,但是在cc.director.preloadScene這個函數(shù)中新增了一個參數(shù):
所以我們可以通過這個參數(shù)來獲取加載的進(jìn)度:
cc.director.preloadScene("sceneName", this.onProgress.bind(this), function(){
cc.log("加載成功")戴涝;
})
onProgress?:function(completedCount, totalCount, item){
this.loading.progress = completedCount/totalCount;
this.loadLabel.string = Math.floor(completedCount/totalCount * 100) + "%";
}
三、 源碼角度分析本質(zhì)
其實(shí)無論是預(yù)加載場景還是加載資源钻蔑,本質(zhì)調(diào)用的還是cc.loader.load這個api啥刻,看底層代碼可以知道,源碼部分截圖如下:
1. 預(yù)加載場景
2. 加載資源
而cc.loader.load的內(nèi)部實(shí)現(xiàn)的參數(shù)中就是帶有這個回調(diào)函數(shù)的咪笑,如下圖:
四可帽、 結(jié)論
所以我們還可以這樣寫來獲取加載場景的進(jìn)度:
var info = cc.director._getSceneUuid(this.sceneName);
var self = this;
if (info) {
cc.loader.load({ uuid: info.uuid, type: 'uuid' }, function(completedCount, totalCount, item){
cc.log("已完成Items:" + completedCount);
cc.log("全部Items:" + totalCount);
cc.log("當(dāng)前Item:" + item.url);
self._loadingNextStep = parseInt(completedCount / totalCount * 100);
cc.log("加載進(jìn)度:" + self._loadingNextStep);
}, function(error, asset){
if (error) {
cc.errorID(1210, this.sceneName, error.message);
} else {
cc.log("加載完成");
}
}
});