cocos2d x 記憶體管理二

2021-06-12 00:58:35 字數 2230 閱讀 6411

分類: 學習筆記

2012-12-19 01:00

16人閱讀收藏

舉報 目錄(?)

[+]

減少你的程式的大小

texturepacker png 優化

移除未使用的資源檔案

減少聲音檔案大小

streaming *** files

減少tilemap大小

就沒啦

全文如下:

把紋理的顏色位深度減少到16位,不僅可以減少記憶體壓力,還可以有效地減少程式的體積。但是,我們還有其它方法可以更進一步地減少程式的大小。

texturepacker png 優化

當然,你只有在真正發布應用的時候才需要利用這個優化特性。現在的問題是,它到底可以減少多少檔案體積呢?

我最大的一張png從2.4mb減少到了2.2mb.小一些的紋理從180kb減至130kb。可能單個檔案減少的量並不是很多,可是當你的png的總大小有18mb時,它可以使之減少至16mb。

注意,在xcode裡面有一項設定,你可能會把它忽略掉。你需要關閉"compress png files"開關,因為這個選項有可能會使你的png膨脹。你可以在xcode的build settings裡面設定,如下所示:

如果啟用此png壓縮選項,xcode會在png檔案打包程序式的時候執行自帶的png優化程式。所以,有可能會使我們先前使用tp優化過的png再次膨脹。因此,再次確保這個選項已關閉!

不過即使你沒有禁用此選項,你的程式大小還是會有所減小。因為,你有可能使用一些沒有被tp優化過的png。

在xcode裡面,執行archive build(在選單中選擇product->archive)。當build成功的時候,xcode的organizer視窗會開啟,然後你會看到乙個「estimate size」(評估大小)的按鈕,可以用來估算你的應用程式大小:

移除未使用的資源檔案

在開發遊戲的過程中,你會經常新增、移除和替換遊戲資源。所以,你可能會因為某些原因,忘記移除一些不用的資源。所以,你需要額外注意把它們都從專案中移除出去,至少要從程式的target中出去。

尤其是你使用多個target的時候(比如,你同時維護ipad和mac版本),你就極有可能會在乙個target裡面新增一些錯誤的資源。

當然,在移除資源之後,你一定要充分測試你的遊戲。切記!一定要充分測試。

減少聲音檔案大小

有時候,我們也會忽視這個問題。如果你不考慮聲音檔案的格式,不管是就記憶體的使用還是程式的大小而言,都是一種極大的浪費。下面是一些方法可以用來減少聲音檔案的大小。我推薦大家使用一款免費的聲音編輯工具。

立體聲道變單聲道– 你的***檔案可以採用立體聲,但是,這樣做值得嗎?如果你聽不出來差別的話,建議還是採用單一聲道。這樣可以把檔案大小和記憶體使用都減少一半。

*** 位元率–在ios裝置上面,任何位元率大於192kbps的聲音都是浪費。你可以盡量採用低的位元率來獲得最好的音質效果,這是乙個折中。一般來說,96到128kbps對於***檔案來說夠用了。

取樣率– 大部分的聲音檔案使用11,22,44,或者48khz取樣率。取樣率越低,聲音檔案越小。但是,這樣聲音質量也會越低。44khz已經達到了cd的音質了,而48khz會更好(這個差別只有調音師才可以聽出來)

在大部分情況下,44khz或者更高的位元率都有點浪費。所以,可以嘗試下減小取樣率(在audacity裡面:tarck->resample)。不要只是修改取樣率,因為這樣會改變聲音檔案的音高。

streaming *** files

減少tilemap大小

許多開發者沒有注意到,tilemap大小太大會消耗大量記憶體。假設你有乙個1000*1000的tilemap,這個大概要消耗1m的記憶體--如果每乙個tile消耗乙個位元組的記憶體的話。然而,如果每乙個tile大概消耗64個位元組的話,那麼這個tilemap就會消耗60mb記憶體。我的天啊!

除了寫乙個更優的tilemap渲染器以外,我們唯一可以做的就是減少tilemap的大小了,也可以把地圖一分為二。

哈哈,是滴。這次,我把文章變短一些,希望你們都看懂了。

Cocos2d x記憶體管理(二)

cocos2d x記憶體管理 二 前一篇我們講到cocos2d x裡的記憶體管理機制,以及引擎中的自動記憶體管理機制。乙個被自動管理的物件從new出來之後到被放到autoreleasepool那麼接下來,物件是如何被引擎自動delete掉的呢?首先我們要知道,cocos2d x的引擎執行緒是單執行緒...

Cocos2d x記憶體管理(二)

前一篇我們講到cocos2d x裡的記憶體管理機制,以及引擎中的自動記憶體管理機制。乙個被自動管理的物件從new出來之後到被放到autoreleasepool那麼接下來,物件是如何被引擎自動delete掉的呢?首先我們要知道,cocos2d x的引擎執行緒是單執行緒的,它不停的呼叫voidccdis...

Cocos2d x記憶體管理(二)

cocos2d x記憶體管理 二 前一篇我們講到cocos2d x裡的記憶體管理機制,以及引擎中的自動記憶體管理機制。乙個被自動管理的物件從new出來之後到被放到autoreleasepool那麼接下來,物件是如何被引擎自動delete掉的呢?首先我們要知道,cocos2d x的引擎執行緒是單執行緒...