1、cocos2dx之如何優化內存使用(高級篇)

本文由qinning199原創,轉載請註明:http://www.cocos2dx.net/?p=93android

1、內存優化原則ios

 

爲了優化應用內存,你應該知道是什麼消耗了你應用的大部份內存,答案就是Texture(紋理)!它幾乎佔據了90%的應用內存。那麼咱們應該盡力去減少咱們應用的紋理內存使用,不然咱們的應用進程可能會被系統殺死。c++

爲了減小內存警告,這裏咱們給出兩個廣泛的關於cocos2dx遊戲內存優化的指導原則。xcode

1)瞭解瓶頸,而後解決掉緩存

什麼樣的紋理消耗了大部分應用的內存呢?或者說這些紋理消耗了多少內存呢?你不用去手工計算或者猜想。工具

這裏咱們正好有一個工具。它就是蘋果的開發工具- Allocations & Leaks,在xcode中你長按Run按鈕而且選擇Profile去啓動這兩個工具。這裏咱們有個截圖:開發工具

 

你可使用Allocation工具去計算你應用的內存使用狀況而且能夠查看內存泄露狀況。字體

你也能夠用一些代碼去獲取遊戲內存使用的一些有用的信息。優化

以下代碼便可:spa

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)不要過分優化

這是一個常規的優化規則。當你進行內存優化的時候,你應當進行一下權衡。由於有時圖片質量和圖片內存使用狀況是相反的兩邊。因此千萬不要過分優化。

2、內存優化等級

這裏咱們把cocos2dx內存優化劃分紅三個等級。在每一個等級,咱們有不一樣觀點而且策略也是有些變化。

一、cocos2dx 客戶端等級

這是咱們能夠關心的最重要的優化等級。由於咱們在cocos2dx引擎上開發遊戲,引擎本身就提供了不少可選擇的優化方案。在這個等級上,咱們能夠作的工做最多。

首先,讓咱們看一下紋理優化

爲了優化紋理內存的使用,咱們必須知道什麼因素影響了內存的使用狀況。

有三個因素影響了紋理的內存使用。紋理格式(壓縮的仍是非壓縮的),顏色,大小。

咱們可使用PVR格式的紋理來減小內存使用。最被建議的紋理格式是pvr.ccz,每色的bit值越高,畫面質量就約好。可是也會消費不少內存。

那麼咱們使用顏色深度是RGBA4444的紋理來代替RBGA8888,這將會消費一半內存。

咱們也會發現大紋理也會致使內存相關的問題。那麼你最好使用適度的大小。

其次,讓咱們作一些關於聲音的事情

有三個因素影響文件內存使用。是音頻文件格式,比特率,和樣本率

咱們最但願音頻文件時mp3格式。由於它被android和ios都支持。而且它也被壓縮而且硬件加速了。

你應該保證你的背景音樂文件大小在800KB一下。最簡單的方式就是減小背景音樂播放時間而且重複調用。

你應該保持你的音頻文件樣本率在96-128kbps之間,而且比特率在44kHz就足夠了。

最後,咱們談談字體和粒子系統優化。

這裏咱們有兩個建議:當使用BM字體顯示遊戲分數,在你的圖片文件中選擇最小的數字字符,例如:

若是你想只顯示數字,你能夠移除全部的字符。

粒子系統中,咱們能夠減小粒子數量來減小內存使用。

二、cocos2dx引擎等級

若是你不擅長OpenGLES和遊戲引擎內核,你能夠把這部分留個引擎開發者。若是你是一個開源遊戲引擎愛好者,若是你已經作了引擎等級的一些優化,請告知引擎開發者們!

三、c++語言等級

在這個等級,個人建議就是寫一些無內存泄露的代碼。使用cocos2dx引擎內存管理工具而且盡最大努力避免內存泄露。

3、建議和技巧

一、一幀幀的加載遊戲資源。

二、減小繪製調用。使用CCSpriteBatchNode

三、按照最大到最小的順序的加載紋理

四、避開內存使用高峯、

五、使用加載界面來預加載遊戲資源。

六、當不須要的時候釋放無用的資源

七、當有內存警告的時候釋放緩存的資源

八、使用texturePacker來優化紋理尺寸,格式,色彩深度值等等。

九、當心使用JPG文件

十、使用16位RBGA4444色彩深度的紋理

十一、使用NPOT紋理代替POT紋理

十二、避開加載大尺寸圖片

1三、使用1024*1024 NPOT pvr.ccz紋理圖集而不是原生圖片

相關文章
相關標籤/搜索