如何優化Cocos2d-X遊戲的內存

2D遊戲中最佔內存的就是圖片資源了,在實際項目中發現圖片使用不同的紋理格式帶來的性能差異巨大,下表是我在IOS平臺一個小Demo中的測試結果,該Demo的原始內存佔用是7M,測試方法是一次性加載5張2048*2048的圖片,使用TexturePacker工具生成圖片,內存統計使用Instrument工具,加載時間統計用-X引擎提供的CCTime類,單位是微秒。

圖片格式               加載時間   內存佔用 備註 
png                         782080     88M         5張 2048*2048 的PNG 
pvr.ccz(POT)      394769       102M        5張 2048*2048 的pvr.ccz(POT:2的整次方) 
pvr.ccz(NPOT)   338099      85M          5張 2047*1680 的pvr.ccz(NPOT:非2的整次方,即圖的實際大小) 
pvr(PVRTC4)     8875            33M          5張 2048*2048 的pvr(PVRTC4:壓縮比率爲8:1的有損壓縮,實際測試發現畫質基本沒有損失)

結論: 
1)比較加載速度:原始PNG是最慢的,使用POT的pvr.ccz大約是原始PNG的50%,使用NPOT的pvr.ccz大約是原始PNG的43%,使用pvr則只要原始PNG的1%; 
2)比較內存佔用:使用POT的pvr.ccz大約是原始PNG的1.2倍,使用NPOT的pvr.ccz和原始PNG差不多,使用pvr只要原始PNG的40%;

從中可以看到,對於尺寸大的圖片,選擇紋理格式時,最優先使用的是PVR,其次是NPOT的pvr.ccz,考慮到多平臺支持,綜合起來,對圖片資源的管理方案可以如下(以下所說圖片尺寸以iPad高清爲標準): 
1)對於1024*1024及以下的小圖片,還是使用PNG,因爲簡單,所有平臺都能用; 
2)對於1024*1024以上的圖片,首選用pvr,它能直接載入到IOS設備的顯存裏,無需經過內存解析,所以快;但是,遺憾1:安卓設備不支持;遺憾2:TP工具不支持生成2048*2048以上的pvr; 
3)如2所述,對於2048*2048以上的圖片,及安卓設備,則使用NPOT的pvr.ccz,在Cocos2d-x 2.x引擎裏默認已經支持,所有3代(iphone 3GS)以後的ios設置都支持cocos2d 2.x(因爲它們支持OpenGL ES2.0),所以也都能支持NPOT紋理; 
4)安卓設備是否支持NPOT還需經過測試(前面版本已經使用過了POT的pvr.ccz沒問題)。如果支持,則方案比較簡單,1024*1024及以下的用PNG,1024*1024以上的使用NPOT選項的pvr.ccz;

採用以上方案後,遊戲所佔內存從90多M降到了60多M,在IOS各種設備跑過了,touch3、touch4、iPad1等低端設備都沒問題。

http://blog.chukong-inc.com/index.php/2013/02/04/%E5%A6%82%E4%BD%95%E4%BC%98%E5%8C%96cocos2d-x%E6%B8%B8%E6%88%8F%E7%9A%84%E5%86%85%E5%AD%98/


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