cocos2dx優化記憶體技巧

2021-09-17 23:13:41 字數 2722 閱讀 6039

一、記憶體優化原則

為了優化應用記憶體,你應該知道是什麼消耗了你應用的大部分記憶體,答案就是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: "***/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,這將會消費一半記憶體。

我們也會發現大紋理也會導致記憶體相關的問題。那麼你最好使用適度的大小。

其次,讓我們做一些關於聲音的事情

有三個因素影響檔案記憶體使用。是音訊檔案格式,位元率,和樣本率

我們最希望音訊檔案時***格式。因為它被android和ios都支援。並且它也被壓縮並且硬體加速了。

你應該保持你的音訊檔案樣本率在96-128kbps之間,並且位元率在44khz就足夠了。

最後,我們談談字型和粒子系統優化。

如果你想只顯示數字,你可以移除所有的字元。

粒子系統中,我們可以減少粒子數量來減少記憶體使用。

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紋理圖集而不是原生

遊戲執行時,最基本的記憶體佔: 

1、紋理記憶體 (粒子特效,動畫檔案)

2、字型、音訊檔案

3、**執行記憶體,c++層,lua層

cocos2d x記憶體優化

程式包的 體積 優化方法 首先 你需要很清楚當前自己專案什麼地方佔的體積最多,例如動畫序列多少mb 地圖佔多少mb等等,都要提前做乙個check 別總是認為 可能佔的多,要詳細的知道才行!1.採用工具對資源進行 打包 例如texturepacker 等工具。2.採用png壓縮工具等,在打包前對每張進...

cocos2dx記憶體優化

一 cocos2dx之如何優化記憶體使用 高階篇 一 記憶體優化原則 為了優化應用記憶體,你應該知道是什麼消耗了你應用的大部分記憶體,答案就是texture 紋理 它幾乎佔據了90 的應用記憶體。那麼我們應該盡力去減小我們應用的紋理記憶體使用,否則我們的應用程序可能會被系統殺死。為了減少記憶體警告,...

cocos2dx記憶體優化

cocos2dx裡面,sprite本身不消耗多少記憶體,只是關聯的材質檔案消耗記憶體。假設有10個sprite關聯同乙個材質,也不會有10倍消耗。關於占用的材質記憶體,我覺得還有好幾種優化手段 1 對於背景圖,因為不需要考慮透明問題。載入材質時可以使用 rgb565 格式 5位紅色,6位綠色,5位藍...