著名的圖片打包軟件TexturePacker,只要是做游戲應用開發,幾乎都會或多或少的用到它。
使用TexturePacker更多的性能優勢在於手游上,因為無論Android或者ios系統使用的是OpenGL ES來渲染,所以我們要針對OpenGL ES來進行優化。
第一點:內存方面,OpenGL ES紋理要求寬和高都是2的n次冪的倍數。就是說,若start.png這張圖片本身是480X320的話,那它在載入內存后其實是一張512X512的紋理。那它具體占用了多少內存呢?默認情況下,當在Cocos2D里加載一張圖片時,對於每一個像素點使用4個字節(1個byte即8bit)來表示——分別代表red\green\blue\alpha透明通道,簡稱RGBA8888。這樣的話,這張start.png圖片在使用默認像素格式下所占內存為:512*512*4=1MB。所以我們可以考慮將小的圖片拼成到大的圖片,然后一起加載。
第二點:渲染速度方面,OpenGL ES要求盡量減少渲染時切換紋理和glDrawArray的呼叫,所以將圖片拼成大圖片,這樣就減少了紋理的切換。所以使用TexturePacker是很有必要的。
TexturePacker所支持的游戲引擎更是相當廣泛,主要有:
Cocos2d-iPhone
Corona(TM) SDK - Cross-platform game development framework
Gideros - Cross-platform game development framework
Sparrow - iPhone
LibGDX - Java (Android + Desktop)
LimeJS - JavaScript/HTML5 framework
Ogre with CEGUI - 3D gaming framework and GUI
Moal - Multiplatform gaming framework
CSS Sprites
JSON / HTML5
......
TextturePacker的界面的一些設置項:
Data Format:導出什么引擎數據,默認cocos2d,下拉列表中有很多,基本常用的引擎都支持了
Data File :導出文件位置(后綴名.plist) Texture Format:紋理格式,默認png
Image format:圖片像素格式,默認RGBA8888...根據對圖片質量的需求導出不同的格式
Dithering:抖動,默認NearestNeighbour,(如果圖像上面有許許多多的“條條”和顏色梯度變化)將其修改成FloydSteinberg+Alpha;
Scale: 讓你可以保存一個比原始圖片尺寸要大一點、或者小一點的spritesheet。比如,如果你想在spritesheet中加載“@2x"的圖片(也即為Retina-display設備或者ipad創建的)。但是你同時也想為不支持高清顯示的iphone和touch制作spritesheet,這時候只需要設置scale為 1.0,同時勾選autoSD就可以了。也就是說,只需要美工提供高清顯示的圖片,用這個軟件可以自己為你生成高清和普清的圖片。
Algorithm TexturePacker:里面目前唯一支持的算法就是MaxRects,即按精靈尺寸大小排列,但是這個算法效果非常好,因此你不用管它。
Border/shape padding: 即在spritesheet里面,設置精靈與精靈之間的間隔。如果你在你的游戲當中看到精靈的旁邊有一些“雜圖”的時候,你就可以增加這個精靈之間的間隔。
Extrude: 精靈邊界的重復像素個數. 這個與間隔是相對應的--如果你在你的精靈的邊邊上看到一些透明的小點點,你就可以通過把這個值設設置大一點。
Trim: 通過移除精靈四周的透明區域使之更好地放在spritesheet中去。不要擔心,這些透明的區域僅僅是為了使spritesheet里面的精靈緊湊一點。--當你從cocos2d里面去讀取這些精靈的時候,這些透明區域仍然在尋里。(因為,有些情況下,你可能需要這些信息來確定精靈的位置)
Shape outlines: 把這個選項打開,那么就能看到精靈的邊邊。這在調試的時候非常有用。
AddSprite:添加圖片
Add Folder:根據文件夾添加圖片
Publish:導出資源文件(.plist和png)