一、內存優化原則
為了優化應用內存,你應該知道是什么消耗了你應用的大部分內存,答案就是Texture(紋理)!它幾乎占據了90%的應用內存。那么我們應該盡力去減小我們應用的紋理內存使用,否則我們的應用進程可能會被系統殺死。
為了減少內存警告,這里我們給出兩個普遍的關于cocos2dx游戲內存優化的指導原則。
1)了解瓶頸,然后解決掉
什么樣的紋理消耗了大部分應用的內存呢?或者說這些紋理消耗了多少內存呢?你不用去手工計算或者猜測。
這里我們正好有一個工具。它就是 Allocations & Leaks,在xcode中你長按Run按鈕并且選擇Profile去啟動這兩個工具。這里我們有個截圖:
你可以使用Allocation工具去計算你應用的內存使用情況并且可以查看內存泄露情況。
你也可以用一些代碼去獲取游戲內存使用的一些有用的信息。
如下代碼即可:
CCTextureCache::sharedTextureCache()-》dumpCachedTextureInfo();
如下所示:當你調用這些代碼并且在DEBUG模式運行你的游戲的時候,在你的xcode console窗口你將會看到一些格式化的log信息
Cocos2d: cocos2d: “cc_fps_images” rc=5 id=3 256 x 32 @ 16 bpp =》 16 KB
Cocos2d: cocos2d: “XXX/hd/actor.pvr.ccz” rc=1059 id=4 2048 x 2048 @ 32 bpp =》 16384 KB
Cocos2d: cocos2d: CCTextureCache dumpDebugInfo: 2 textures, for 16400 KB (16.02 MB)
這些log顯示了紋理的名字,引用數,id,大小以及像素的bit值,最重要的是它展示了內存使用情況。如上cc_fps_images消耗了16KB,actor.pvr.ccz消耗了16M內存。
2)不要過度優化
這是一個常規的優化規則。當你進行內存優化的時候,你應當進行一下權衡。因為有時圖片質量和圖片內存使用情況是相反的兩邊。所以千萬不要過度優化。
二、內存優化等級
這里我們把cocos2dx內存優化劃分成三個等級。在每個等級,我們有不同觀點并且策略也是有些變化。
1、cocos2dx 客戶端等級
這是我們可以關心的最重要的優化等級。因為我們在cocos2dx引擎上開發游戲,引擎自己就提供了很多可選擇的優化方案。在這個等級上,我們可以做的工作最多。
首先,讓我們看一下紋理優化
為了優化紋理內存的使用,我們必須知道什么因素影響了內存的使用情況。
有三個因素影響了紋理的內存使用。紋理格式(壓縮的還是非壓縮的),顏色,大小。
我們可以使用PVR格式的紋理來減少內存使用。最被建議的紋理格式是pvr.ccz,每色的bit值越高,畫面質量就約好。但是也會消費很多內存。
那么我們使用顏色深度是RGBA4444的紋理來代替RBGA8888,這將會消費一半內存。
我們也會發現大紋理也會導致內存相關的問題。那么你最好使用適度的大小。
其次,讓我們做一些關于聲音的事情
有三個因素影響文件內存使用。是音頻文件格式,比特率,和樣本率
我們最希望音頻文件時mp3格式。因為它被android和ios都支持。并且它也被壓縮并且硬件加速了。
你應該保證你的背景音樂文件大小在800KB一下。最簡單的方式就是減少背景音樂播放時間并且重復調用。
你應該保持你的音頻文件樣本率在96-128kbps之間,并且比特率在44kHz就足夠了。
最后,我們談談字體和粒子系統優化。
這里我們有兩個建議:當使用BM字體顯示游戲分數,在你的圖片文件中選擇最小的數字字符,例如:
如果你想只顯示數字,你可以移除所有的字符。
粒子系統中,我們可以減少粒子數量來減少內存使用。
2、cocos2dx引擎等級
如果你不擅長OpenGLES和游戲引擎內核,你可以把這部分留個引擎開發者。如果你是一個開源游戲引擎愛好者,如果你已經做了引擎等級的一些優化,請告知引擎開發者們!
3、c++語言等級
在這個等級,我的建議就是寫一些無內存泄露的代碼。使用cocos2dx引擎內存管理工具并且盡最大努力避免內存泄露。
三、建議和技巧
1、一幀幀的加載游戲資源。
2、減少繪制調用。使用CCSpriteBatchNode
3、按照最大到最小的順序的加載紋理
4、避開內存使用高峰、
5、使用加載界面來預加載游戲資源。
6、當不需要的時候釋放無用的資源
7、當有內存警告的時候釋放緩存的資源
8、使用texturePacker來優化紋理尺寸,格式,色彩深度值等等。
9、小心使用JPG文件
10、使用16位RBGA4444色彩深度的紋理
11、使用NPOT紋理代替POT紋理
12、避開加載大尺寸圖片
13、使用1024*1024 NPOT pvr.ccz紋理圖集而不是原生圖片
評論