文章出處

概述

包括以下5種優化:引擎底層優化、紋理優化、渲染優化、資源緩存、內存優化
 

引擎優化

2.0版本比1.0版本在算法上有所優化,效率更高。2.0版本使用OpenGl ES 2.0圖形庫,1.0版本使用OpenGL ES 1.0。

紋理優化

紋理是最消耗內存的,而且會降低渲染速率。

 

二的冪次方

OpenGL在申請內存存放紋理時,是按2的冪次方申請的,即對應480*320的圖片,它申請的是512*512空間。可見,會有相當多的內存被浪費。所以,我們設計的圖片,最好是2的冪次方,不然OpenGL最終還是申請2的冪次方內存空間。

由于不是所有圖片都剛好能設計成2的冪次方,因此通過“拼圖”方法解決。這就是為啥要使用TexturePacker的原因。如圖:

色深優化

圖片所占內存的大小用這條公式計算:高度像素*寬度像素*色深。如色深RGBA8888,是32個bit,每8bit是一個字節,因此一個像素點占4字節,就是一個整形字符大小。例子。一個480*320的圖片大小,占內存480*320*4字節。

通常,如果對圖片的色彩要求不是很高的話。ARGB8888(占4字節)可以改為,ARGB1555(2字節)(透明通道A占1位一般是用做圖片混合運算)或者ARGB4444(如果不是做混合運算,用4位比較合適)。或者,如果不需要使用圖片透明,就不需要A通道,直接使用RGB888(3字節)改為RGB565(2字節)。這樣,圖片的最終內存大小就會占用更少的空間。

紋理壓縮格式

IOS系統使用PowerVR顯示芯片,可以直接硬解碼PVR格式,該格式可以直接被IOS讀取。不過該方式不適合Android等平臺。

PVR格式實際上就是把ARGB8888轉成ARGB1555色深進行保存的。

骨骼動畫

cocos2d-x 2.0.3開始支持骨骼動畫,cocos2dBuilder2.1版本也可以進行動畫編輯。在處理動畫時,對內存優化也是很好的方案。

紋理尺寸限制

不同設備支持的紋理尺寸不一樣,iphone4支持最大的是4096*4096,iphone4s是4096*2048。有的android設備,僅僅限制在1024*1024。拼圖的時候要避免把圖片拼的太大。為了提高游戲的兼容性,圖片的尺寸最好都設置在1024*1024范圍內(主流設備都支持)。

渲染優化

批次處理

使用CCSpriteBatchNode,準備好Sprite的坐標信息后,進行一次性渲染。

傳統渲染處理是這樣的:不同的切換紋理,不同地加載和渲染。而批次處理是一次加載完所有紋理,然后一次渲染,這樣效率就提高了。

資源緩存

CCSpriteFrameCache
CCTextureCache
緩存比較耗電量,所以,一般使用完,就會調用remove函數。而且在預加載時要顯示進度條,可能會影響用戶體驗,應該根據情況使用。

內存優化

 

資源占用的內存優化

如前面幾個小節所述

內存池方案

游戲啟動的時候就分配很大的一塊區域,游戲運行過程中不釋放,直到退出游戲再釋放。平時不是為新資源分配內存,而是把資源加載到內存池里面。多次使用的時候,就不用經過多次的釋放和重新加載。這部分可以多了解下C++的內存池管理機制。

文章列表


不含病毒。www.avast.com
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()