cocos 爬坑日記(6)優化系列之①


緣起

最近在做avg類的遊戲,特點是資源特別多,各種表現會比在下以前開發的遊戲更豐富...
(當然,也許並沒有那麼細膩,但是豐富是肯定的)
功能完成了,就要開始兢(jie)兢(si)業(di)業(li) 地 優化了...痛苦並快樂着,謹以此文記錄,
希望後來者看到這篇粗淺的稿子能夠少走點彎路;
然後感謝cocos,用也用了,吐槽也吐了,但還是希望cocos越做越好 .

**

資源的優化:

**
1.圖片資源
目前在下圖片資源的優化主要有兩種方式,一是圖集,二是壓縮(無論png還是jpg,其實jpg只能讓你的包更小,但是其實是會更耗性能的,因爲cocos會把jpg轉成png再用…這個過程嘛…你懂的)
圖集用的TexturePackerGUI打包(它還能整字體圖集,具體請各位自行百度咯)
然後圖片的壓縮, 個人覺得 tiny 挺好用的,拉上去,拿下來,簡單方便.

2.音效資源
音效其實說起來挺簡單的,儘量打包成MP3,假如不是特別影響,還可以整成單聲道…嗯,這個就比較看具體的需求了,一般來說背景音樂會大一些,需要優先處理.
工具的話,個人感覺瞄影工廠挺好用的…

3.spine資源
其實說實話,spine是在下目前仍在頭疼的一個部分(不是資源,資源其實圖片壓縮好了,問題並不是很大…而是加載以及釋放的問題,這個可能會放在下一篇跟大家一起討論…暫且掠過)

**

加載優化

**
tip : 在avg遊戲裏面,圖片的替換是非常頻繁的,而且就像電影一樣,用戶還很可能隨時讀檔跑回前面的章節去玩,所以有時候直接釋放資源是不科學的(直接釋放了圖片資源,玩家讀檔回來就炸了…血淚的教訓…)

所以,理想的情況下,過程應該是這樣的:

avg普通進行過程
一開始的時候,資源並不多,但是到了後來,當圖片資源上百兆的時候,假如一次性加載資源到內存裏,那就很恐怖了:壓縮的資源多大其實沒關係,看圖片的大小,假設一張圖片7201334,那麼它的大小就是 (72013344) /(10241024) = 3M, 100張圖片就是300M ,這還不算上其他的開銷…

…所以只能進行預加載,然後放空(不,如果你確定後面還會用到的話, 暫時不要用cc.loader.release 等函數釋放,不然會炸…別問我爲什麼知道…)前面已用過且暫時不需要的資源了,怎麼做?直接把緩存下來的spriteFrame數組清空就好了…讓js自己去管這事兒吧…

過程如下:

1.預加載圖片 spriteFrames : cc.spriteFrame = [] //放進去
2.拿出節點,賦值sprite.spriteFrame = spriteFrames[curSpriteFrame] ; 
3.這組圖片用完了,回收 spriteFrames = [] //注意,其他地方如果有引用當前的spriteFrame , 那個spriteFrame是不會被釋放的
4.跳到1

這樣就能儘量保證圖片的及時加載,而不容易跳幀了,由於時間關係,今天暫時就到這兒~ ~未完待續!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章