概述
引擎優化
紋理優化
紋理是最消耗內存的,而且會降低渲染速率。
二的冪次方
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的坐標信息后,進行一次性渲染。
傳統渲染處理是這樣的:不同的切換紋理,不同地加載和渲染。而批次處理是一次加載完所有紋理,然后一次渲染,這樣效率就提高了。
資源緩存
內存優化
資源占用的內存優化
內存池方案
文章列表