有時候,當我們場景上掛載的資源過多時,我們使用cc..切換場景時會等一段時間才會切換過去加載時候的進度條 js,這對游戲的體驗是相當不好的。所以我們可以使用cc..來進行預加載,如:
cc..("", () {
cc..("");
});
同時搭載一個加載進度條來實現顯示加載進度,優化游戲體驗:
二、 如何獲取加載時的進度?
1. Cocos 2.0版本之前
在Cocos 2.0版本之前加載時候的進度條 js,我們可以使用下面這樣的方法:
cc.. = (, , item){
//先開監聽
this.. = /;
this.. = Math.floor(/ * 100) + "%";
}.bind(this);
cc..("", () {
cc.log("加載成功");
});
備注:就是你在腳本中綁定的進度條組件。
2. Cocos 2.0版本之后
Cocos 升級到2.0版本后,貌似就無法使用了,所以上述那個方法無法獲取到加載進度,但是在cc..這個函數中新增了一個參數:
所以我們可以通過這個參數來獲取加載的進度:
cc..("", this..bind(this), (){
cc.log("加載成功");
})
:(, , item){
this.. = /;
this.. = Math.floor(/ * 100) + "%";
}
三、 源碼角度分析本質
其實無論是預加載場景還是加載資源,本質調用的還是cc..load這個api,看底層代碼可以知道,源碼部分截圖如下:
1. 預加載場景
2. 加載資源
而cc..load的內部實現的參數中就是帶有這個回調函數的,如下圖:
四、 結論
所以我們還可以這樣寫來獲取加載場景的進度:
var info = cc..(this.);
var self = this;
if (info) {
cc..load({ uuid: info.uuid, type: 'uuid' }, (, , item){
cc.log("已完成Items:" + );
cc.log("全部Items:" + );
cc.log("當前Item:" + item.url);
self. = ( / * 100);
cc.log("加載進度:" + self.);
}, (error, asset){
if (error) {
cc.(1210, this., error.);
} else {
cc.log("加載完成");
}
}
});
}