最初我們游戲是在載入的loading界面將所有資源進行加載,這樣導致游戲啟動的時候加載使用了相當長的時間,為了優(yōu)化這塊,進行了以下幾點優(yōu)化:
1.刪除游戲內(nèi)多余的資源
2.將資源打包成大圖
3.將游戲場景內(nèi)的資源game提出,不要放在texture目錄下,然后在游戲進入大廳場景的時候,再去加載游戲內(nèi)的資源,并且設置一個全局的標識符,只有當game加載完成,標識符才設置為true。在各個進入游戲場景之前,對標識符進行判斷,不是true就return,并且畫出一個loading的界面,告知玩家。
下面是開始游戲的時候加載資源的代碼:
var self = this;
cc.loader.loadResDir("texture", function (completedCount, totalCount, item) {
// console.log("completedCount:" + completedCount + ",totalCount:" + totalCount );
if (self.isLoading) {
self.pregress = completedCount / totalCount;
}
},
function (err, assets) {
self.onLoadComplete();
cc.loader.onComplete = null;
self.isLoading = false;
});
由于網(wǎng)速太慢,會有進入微信小游戲之后不能立刻顯示loading界面的問題, 這個問題目前只有在loading界面之前再增加一個只有l(wèi)oading背景圖的界面,并且這個資源打包放入到上傳到微信4M包中。這樣,網(wǎng)速慢的手機也就不會有黑屏產(chǎn)生而是卡在背景圖的界面。但是這個問題是每次上傳包的時候都要手動去保留res目錄和它下面的這個背景圖的資源,還有相關調用到的json文件。
----------------假裝解決的分割線----------------
策劃認為目前進入到大廳還是有些慢,今天再次對這個情況進行如下的優(yōu)化:
1.大廳內(nèi)的二級功能界面全部制作成預制體,并且通過動態(tài)加載的方式去調用,而不是用編輯器拖拽的方式去調用。
2.把大廳第一眼能顯示的內(nèi)容資源提出新命名一個beforeLoading,這一塊內(nèi)容放在loading場景去加載。texture剩余的部分和game文件夾一同在進入大廳之后在加載。
3.將大廳使用到的所有龍骨動畫進行處理,只有調用到的時候再去進行加載,而不是用編輯器拖拽的方式去調用。
----------------作死的分割線----------------
策劃要求和途游的棋牌載入速度保持一致。。。意思是不能有l(wèi)oading場景也不能有黑屏出現(xiàn)。
為了完成這一需求,刪除了loading場景,所有的邏輯放到大廳,打包大廳的首場景資源為一個大圖加入4M資源,然后登陸完成之后進入大廳加載剩余大廳二級界面的資源和游戲內(nèi)資源。這個做法設計是挺好的,可是,會有黑屏出現(xiàn),一次性加載太多資源和邏輯了,即便是延遲代碼邏輯到下一幀還是黑屏。
----------------再次作死的分割線----------------
為了解決上述問題,再次討論了一個新的方案:制作一個假的大廳的首場景圖放入4M資源,讓玩家看起來就像進入了大廳一樣。然后這個場景圖作為第一個loading場景,這個界面功能就是加載大廳場景的所有資源,加載完成才進入大廳。在上面加一層灰色蒙版,顯示當前資源加載的進度。后來這個灰色蒙版和大廳首場景圖合并為一張圖,進大廳之后再進行加載游戲內(nèi)的資源。
目前的效果終于滿足了策劃的需求,可以進行下一步的優(yōu)化了。
----------------我又換回來了的分割線----------------
目前基本能在微信的白屏加載完成后進入假的大廳界面然后加載大廳資源,而且在3G網(wǎng)速下也沒有問題。但是有的配置很差的手機,就算是wifi環(huán)境下在白屏到大廳中間還是有一段長時間的黑屏,這個解決方法就是在假的大廳加載資源這段代碼寫在一下一幀去執(zhí)行:
this.scheduleOnce(function () {
self.addHallSceneResources();
}, 0.01);
希望我別再回來了=。=!!!
下一步優(yōu)化游戲場景。