【Cocos2d-x 012】 cocos2dx內存優化(之一)

cocos2dx裏面,sprite本身不消耗多少內存,只是關聯的材質文件消耗內存。假設有10個sprite關聯同一個材質,也不會有10倍消耗。

關於圖片佔用的材質內存,我覺得還有好幾種優化手段:
1、對於背景圖,因爲不需要考慮透明問題。載入材質時可以使用 RGB565 格式(5位紅色,6位綠色,5位藍色),每一個像素消耗的內存是16bit = 2byte。比默認的 RGBA8888 消耗的內存少一半。
2、大尺寸的圖可以適當縮小,顯示時拉伸放大。比如960x640的圖可以縮小爲768x512,消耗的內存減少一半。
3、有些sprite不需要那麼多的色彩,可以用 RGBA4444 格式載入,一個像素也只消耗2byte,減少一半。可以用 TexturePacker 這樣的工具處理原始 32bitpng 圖片,生成 RGBA4444 格式的材質文件。
4、多個小圖合併到一起,做成 sprite sheet,可以顯著降低內存使用,性能也會好一點。
5、超大背景圖裁剪成多個小塊,需要顯示哪個區域才載入對應的塊。程序上覆雜不少,但總比內存不足崩潰掉好。

以上優化方法,我個人實踐下來效果還是很明顯的。

1。OpenGL一般都用2的N次方貼圖尺寸,所以製作貼圖時使它儘量接近2的N次方值,比如128*128。如果有個切片組成的貼圖尺寸是130*100,那就嘗試重新排布切片,使它控制在128*128以內,這樣能減少一半內存。
2。可以使用小圖放大來貼,但我建議是對於背景圖這樣,對清晰度要求不高時,將尺寸按整數倍縮小貼圖,然後貼圖時採用Nearest臨近差值算法,這樣效果可以接受,效率又高。
3。將切片合成貼圖時,要注意將使用時機和頻率相當的切片放在一起,這樣可以做到當前加載進內存的貼圖,都是使用頻率最高的。而當前不用的貼圖要及時釋放掉。遊戲玩家一般都可以接受等待進度條加載一些東西。
4。遊戲前期可以用模擬器測試,後期一定要真機+Instruments測試,Xcode的Instruments功能很強,可以檢測Leak,OpenGL優化建議,Allocation等。
5。遊戲注意避免在logic循環或者render循環中反覆分配內存,造成惡性增長。
6。PNG要用PS針對Web壓縮一下,可以縮小文件尺寸,雖然不會減少運行時內存分配,但可以減少貼圖加載的IO時間

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