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時間


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM