Cocos2d-x優化中圖片優化

在2D遊戲中圖片無疑是最爲重要的資源文件,它會被加載到內存中轉換爲紋理,由GPU貼在精靈之上渲染出來。它可以優化的方面不少,包括:圖片格式、拼圖和紋理格式等,下面咱們從這幾個方面介紹一下圖片和紋理的優化。
1.選擇圖片格式
要回答這個問題,咱們須要先了解一下目前在移動平臺所使用的圖片文件格式,以及這些圖片格式Cocos2d-x是否支持。圖片格式有不少,可是在移動平臺主要推薦使用的PNG,JPG也能夠考慮,而其它的文件格式最好轉化成爲PNG格式。咱們先了解一下它們的特色。
一、PNG文件
PNG文件格式設計目的是替代GIF和TIFF文件格式,是一種位圖存儲格式。PNG是採用無損壓縮,能夠有Alpha通道數據支持透明,但不支持動畫。PNG能夠保存高保真的較複雜的圖像,可是文件比較大。PNG格式具體又分爲:PNG8和PNG24,後面的數字則是表明這種PNG格式最多能夠索引和存儲的顏色值。
二、JPG
JPG全名是JPEG。JPG圖片以 24 位顏色存儲單個位圖圖形。JPG是與平臺無關的格式,支持最高級別的壓縮,壓縮比率能夠高達 100:1,這種壓縮是以犧牲圖像質量爲代價的,換取更小文件大小。JPG不支持透明。JPG比較支持攝影圖像或寫實圖像做品,這是由於它們顏色比較豐富。而對於所含顏色不多、具備大塊顏色相近的區域或亮度差別十分明顯的較簡單的圖片,JPG就不太適合了。


那麼咱們選擇JPG仍是PNG呢?不少人認爲JPG文件比較小,PNG文件比較大,加載到內存紋理,JPG佔有更少的內存。這種觀點是錯誤的!紋理與圖片是不一樣的兩個概念,若是紋理是野營賬篷話,那麼圖片格式是收納摺疊後的賬篷袋子,裝有賬篷的袋子大小,不能表明賬篷搭起來後的大小。特別是在Cocos2d-x平臺JPG加載後被轉化爲PNG格式,而後再轉換爲紋理,保存在內存中,這樣無形中增長了對JPG文件解碼的時間,所以不管JPG在其它平臺表現的多麼不俗,可是在移動平臺下必定它沒法與PNG相提並論。


緩存








2.拼圖
不知道你們是否有過這樣的一個疑問,爲何要把場景中小圖片都拼接成一個大圖片呢?這個問題咱們在使用精靈表的時候簡單說了一下,這一節咱們詳細介紹一下它緣由。
若是把多個小圖拼接稱爲一個大圖(紋理圖或精靈表),能夠減小IO操做。而且使用散圖每次都要針對一個圖,建立精靈添加到紋理緩存,若是很頻繁而大量建立,對於CPU和內存的開銷很高。而使用大圖,則一次性將建立精靈幀緩存,並把它們紋理添加到紋理緩存中,這樣會明顯地提升效率。
在進行圖片拼接的時候,若是可以知足用戶保真度狀況下,大圖越小固然是越好。咱們能夠經過TexturePacker等紋理拼圖工具,設置紋理支持NPOT,這些工具的使用你們能夠參考咱們的(《Cocos2d-x實戰(卷Ⅳ):工具詳解》)。
那麼什麼是NPOT呢?NPOT是「non power of two」的縮寫,意思是非2的N次冪。在OpenGL ES1.1時候紋理圖片要求是2的N次冪(即,POT),不然紋理沒法建立。POT要求下使用紋理工具拼接成的大圖,能夠會有不少的空白區域。以下圖所示,右下角還有一些空白區域,形成了浪費,也會同時增長圖片的大小,下圖所示的圖片大小是2048KB。

微信

POT拼圖工具

OpenGL ES2.0後支持了NPOT,咱們不須要爲圖片是否爲2的N次冪而苦惱,如圖所示,是採用NPOT拼圖,整個圖片基本上沒有大的空白區域,能充分地利用了圖片空間。20-24所示的圖片大小是1822KB,節省了200KB,200KB已經很了不得了。
優化


NPOT拼圖動畫

更多內容請關注國內第一本Cocos2d-x 3.2版本圖書《Cocos2d-x實戰:C++卷》網站

本書交流討論網站:http://www.cocoagame.net
更多精彩視頻課程請關注智捷課堂Cocos課程:http://v.51work6.com
spa

歡迎加入Cocos2d-x技術討論羣:257760386.net

歡迎關注智捷iOS課堂微信公共平臺設計

相關文章
相關標籤/搜索