著名軟件TexturePacker,現在只要是個做游戲的都知道這個軟件。如果你說不知道,我只能說你,Unprofessional!
使用TexturePacker最主要的好處是,我們做的游戲最終要運行在Android手機或者蘋果手機上,而Android或者ios系統使用的是OpenGL ES來渲染。所以我們要針對OpenGL ES來進行優化。內存方面,OpenGL ES紋理要求寬和高都是2的n次冪的倍數。想一想,如果圖片的寬為33,而高為65,那么圖片加載到內存后的大小為多少?考慮到寬和高都是2的n次冪,所以加載到內存后的大小是64*128。所以我們可以考慮將小的圖片拼成到的圖片,然后加載。渲染速度方面,OpenGL ES要求切換的紋理少,所以將圖片拼成大圖片,這樣就減少了紋理的切換。所以使用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
Moai - Multiplatform gaming framework
CSS sprites
JSON / Html5
等等。。。(太多了,:) )
TexturePacker處理的高品質的色彩還原貼圖
要知道openGL載入紋理圖片的時候,所用內存是會自動擴張到2的n次方的。比如,如果你的資源素材是10×10px,載入后,將會按16×16規格載入圖片。如果資源素材是64×65,那么就會按照64×128載入了。假設資源是RGBA8888的圖片格式來算,(255,255,255,255)代表(r, g, b, a),一個點就使用了8位×4=32位。相當於4個byte。按剛才最后一種情況,你浪費的空間是64×(128-65)×4 /1024 = 15K,別說我的內存你無所謂。。。移動設備上的游戲,內存還是吃緊。理論上,如果每一張圖的長寬都恰好是2的n次方數值,那很完美,沒有任何浪費。但是,你懂的。所以我們需要把很多小圖拼接到一張大圖里,比如(2048×2048)然后到代碼中取其所需。這樣,浪費掉的空間就很小了。如果你使用的是RGBA4444,內存又縮減了50%。
RGBA8888 RGBA4444 無抖動 RGBA4444 加抖動
完美解決我們貼圖過大,壓縮效果失真的痛苦,
哈哈,總之太棒了!!!