
【優(yōu)點說明】
有windows版。不是所有人都有條件用水果。有免費功能限制版。(你若要求不太高,TexturePacker夠你用)
支持pvr格式。
支持命令行集成。
有windows版。不是所有人都有條件用水果。
texturepacker的兄弟軟件PhysicsEditor同樣是很好的物理建模工具。

【軟件功能】
1、只需單擊一次即可支持多屏幕分辨率*自動縮小,精靈的所有設(shè)備
*僅創(chuàng)建高分辨率圖像
*TexturePacker尺度圖像
*只需單擊一次就可以為所有設(shè)備發(fā)布
*預(yù)分頻的圖像
*減少運行時內(nèi)存消耗
*提高幀率
2、智能TexturePacker收集精靈
TexturePacker允許你添加完整的資產(chǎn)文件夾。
*自動添加所有圖像:
拖放你的完整的資產(chǎn)文件夾到精靈面板。
*組織你的精靈:
你的精靈文件夾排序,TexturePacker繼承您的文件夾結(jié)構(gòu)。
*群體動畫和相關(guān)的精靈:
Flash動畫顯示為文件夾。
*保存文件夾結(jié)構(gòu)作為精靈名稱的一部分:
使用子文件夾名稱TexturePacker作為最后的精靈的名字的一部分。
在你的資源文件夾TexturePacker軌道變化,如果必要的話,會自動重新建立的表。
3、立即包裝多個精靈表
TexturePacker可以
分布在多個表的精靈:
TexturePacker創(chuàng)建多個圖像和數(shù)據(jù)文件,如果不是所有的精靈可以打包成一個單一的紋理。
排序精靈多紋理地圖集:
針對不同的類別有不同的目錄,例如背景、字符、影響對象等。
4、減少內(nèi)存消耗,而不是圖像質(zhì)量
TexturePacker允許你
使用更多的動畫和精靈:
讓你的動畫更流暢。
節(jié)省內(nèi)存:
壓縮你的精靈表并大幅度減少內(nèi)存使用量。
增加幀率:
更快地計算幀…
讓游戲開始得更快:
為最大性能直接導(dǎo)出到目標系統(tǒng)的圖像格式,例如PVR。
保持視覺質(zhì)量:
在高分辨率設(shè)備或移動物體上,壓縮或抖動的效果幾乎看不見。
【軟件特色】
第一點:內(nèi)存問題, OpenGL ES 紋理的寬和高都要是2次冪數(shù), 以剛才的例子來說, 假如 start.png 本身是 480x320, 但在載入內(nèi)存後, 它其實會被變成一張 512x512 的紋理, 而start.png 則由 101x131 變成 128x256, 默認情況下面,當你在cocos2d里面加載一張圖片的時候,對于每一個像素點使用4個byte來表示--1個byte(8位)代表red,另外3個byte分別代表green、blue和alpha透明通道。這個就簡稱RGBA8888。因此,如果你使用默認的像素格式來加載圖片的話,你可以通過下面的公式來計算出將要消耗多少內(nèi)存來加載:
圖像寬度(width)×圖像高度(height)×每一個像素的位數(shù)(bytes per pixel)=內(nèi)存大小
此時,如果你有一張512×512的圖片,那么當你使用默認的像素格式去加載它的話,那么將耗費512×512×4=1MB(好多?。。?br />第二點:再看看關(guān)於渲染速度方面, OpenGL ES 上來說我們應(yīng)該盡量減少渲染時切換紋理和 glDrawArray 的呼叫, 剛才的例子每畫一個圖像都會切換一次紋理并呼叫一次 glDrawArray , 我們這里只畫3樣東西, 所以不會看到有什麼問題, 但如果我們要渲染幾十個甚至幾百個圖像 , 速度上就會被拖慢. 很明顯這并不是我們所想要的..
估計就這兩點就說服了你吧~ 至少我是了...呵呵!
【破解教程】
1、解壓文件,運行msi文件開始安裝,一路默認安裝即可。
2、安裝完成后,將解壓文件中的“TexturePackerGUI_crack.exe”復(fù)制到安裝目錄的bin目錄下,并運行。

3、在彈出界面選擇使用“use free (lite) version”。

【 使用教程】
1、打開TexturePacker
2、我的圖片資源存放在F:\_data\vPuzzle\resource.work,如果你喜歡,你可以把整個文件夾拖到右邊的①區(qū),下圖是拖進去以后的模樣。

3、但是往往我們不想一股腦把所有圖片合在一張超大的圖中,所以我個人比較喜歡手動添加圖片,這樣便于控制。

4、我添加了一些圖片,并把它們拖到上面圖右邊的區(qū)域

5、ok,該保存了。在data file處填入你要的plist文件路徑,在texture format處選擇你要的圖片格式,在texture file填入你要生成的圖片路徑。(其他還有很多細節(jié)的設(shè)定,請嘗試體驗幾次就明白怎么用了)另外,最后,點擊菜單條的publish按鈕,哦了。之后你可以利用它著手制作一款偉大的游戲了!
TexturePacker命令行使用(command line)
TexturePacker是一個非常好用的小圖合并工具,介紹它的文章非常多,多數(shù)都是使用GUI工具的,但是:
如果原始圖片發(fā)生了改變,我們就需要重新手動拼接一下,麻煩.
使用GUI界面非常不高端,我高大猿族絕對首選使用Command Line啊.
安裝TexturePacker會附帶一個command line工具,讓我們一起學習一下如何使用吧.
環(huán)境搭建
我一般首選在Windows下開發(fā)(不要打我),這里就只講Windows環(huán)境的配置
1.先去這里下載安裝文件,完成后一路無腦下一步,OK.
2.大家在C:\Program Files\TexturePacker\bin目錄下可以看到兩個exe文件,TexturePacker.exe和TexturePackerGUI.exe,前者是命令行工具,后者是GUI工具.
3.默認TexturePacker是沒有加到環(huán)境變量中的,我們需要手動來,右鍵點擊計算機->屬性->高級系統(tǒng)設(shè)置->環(huán)境變量,找到PATH后將C:\Program Files\TexturePacker\bin添加到末尾,注意要在前面加;.
4.運行cmd,輸入TexturePacker大家應(yīng)該能夠看到下面的內(nèi)容:

如果不能的話請檢查拼寫和第2步.大家可以仔細閱讀一下內(nèi)容,寫的十分詳細,用過TexturePacker的話基本上都能對應(yīng)起來.
小試牛刀
你過你看完打印出的信息的話可以發(fā)下末尾部分有三個示例,如下:

看起啦十分簡單,讓我們試一下吧
找一個有這一堆圖片的文件夾的上層目錄,按住Shift點擊右鍵,會發(fā)現(xiàn)一個菜單項在當前目錄打開命令行,打開后按照示例輸入TexturePacker
001/*.png,然后如示例說的:
creates out.plist and out.png from all png files in assets
trimming all files and creating a texture with max. 2048x2048px
實際情況卻不完全是這樣的,你可能會得到這樣的錯誤:

臥槽,這是什么情況啊,明明就是按照官方的示例來的嘛,google完全沒有任何答案啊,經(jīng)過一番痛苦的實驗后,終于發(fā)現(xiàn)了原因所在,這里不能輸入TexturePacker 001/*.png
而應(yīng)該是這個樣子:TexturePacker 001
這個問題可能是由于我使用的版本太舊或使用Windows導(dǎo)致的,如果你沒有遇到,那么最好!
參數(shù)詳解
本想著把所有參數(shù)都講一遍,寫到一半發(fā)現(xiàn)臥槽太多了,而且好些都用不到,這里挑一些常用的分析下,以下內(nèi)容都有進行測試,還是比較準確的,如果有問題,歡迎指出.
注:
選項含有<...>的選項表示含有參數(shù)需要填寫.
粗體表示比較重要的選項.
輸出
–sheet
+生成的圖片名,支持png,jpg,pvr,pvr.czz,pvr.gz格式
+示例:--sheet
out.png
–data
生成的plist文件名示例:--data
out.plist
–format
生成的plist格式,我們使用cocos2d格式示例:--format
cocos2d注:其他支持格式見下圖:

–auto-sd
自動生成sd資源示例:--auto-sd注:這個要注意一點,如果要使用這個參數(shù),你輸入的sheet和data名必須含有-hd或@2x,TP會自動生成不帶后綴的sd數(shù)據(jù).
–texturepath
在生成的sheet文件的路徑前加你示例:--texturepath
image/tower這樣在plist文件中realTextureFileName的值為image/tower/out.png注:這個參數(shù)主要用在當你的圖片與plist文件不再同一個目錄時使用,不會改變out.png的目錄
–trim-sprite-name
剪裁掉拼接圖片的后綴名示例:--trim-sprite-name?這樣在plist文件中
–replace
按照原文的翻譯是使用
–ignore-files
按照原文的翻譯是忽略所有滿足給定條件的圖片(可以使用時間作為條件),你可以使用*或?,但在使用bash時應(yīng)避免使用通配符.
尺寸
先上一張cocos2d-x支持的最大圖片尺寸:

還有官方的這句話:
For the developers, if you want to cross platforms and run your games smoothly, you should keep your texture size?less than 1024*1024,
that is the lowest restriction for most machines.
–width/–height
兩個參數(shù),放在一塊說了,設(shè)置輸出圖片的寬度/高度
示例:--width 100--height
100注:這個值設(shè)置的大了無所謂,會產(chǎn)生空白區(qū)域,但是如果太小,就會報錯:
error: Could not fit all sprites into the sprite sheet.
–max-width/–max-height/–max-size
設(shè)置輸出圖片的最大寬度/高度/尺寸示例:
--max-width1024--max-height
1024前面兩個等價于后面--max-size
1024注:
1.和上面兩個參數(shù)的區(qū)別在于告訴TP實際值別超過這個值就OK,而上邊那兩個參數(shù)告訴TP實際值一定是這個.
2.默認值為2048
3.如果實際值大于設(shè)置的最大值會產(chǎn)生錯誤:
error: Sprite sheet size is too small.
–allow-free-size
允許輸出圖片不是2的冪,以最小尺寸輸出示例:--allow-free-size注:這個一般開啟,cocos2d-x2.0開始就已經(jīng)支持圖片不是2的冪了
間距和旋轉(zhuǎn)
–shape-padding
圖塊之間縫隙的寬度,默認值是2
示例:--shape-padding 100
–border-padding
可以理解為邊框的寬度,默認值為2
示例:--border-padding 100
–padding
間距,這個參數(shù)等價于上面兩個參數(shù)同時同時作用示例:--padding
100注:如果沒有開啟--allow-free-size可能和你想象的不太一樣
–inner-padding
試了一下,這個參數(shù)的作用應(yīng)該是給每個sprite的周圍加一個邊框,默認值為0示例:--inner-padding
100注:上面的這幾個參數(shù)作用都不是很大
–enable-rotation/diable-rotation
開啟/關(guān)閉旋轉(zhuǎn),默認值和輸出的格式有關(guān)系,cococ2d格式默認enable示例--enable-rotation--diable-rotation注:這個很好理解,為了排版更密集些,有的圖片會被旋轉(zhuǎn)
–trim/no-trim
剪裁圖片,即移除圖片周圍的透明像素,保留原始尺寸,默認開啟示例:--trim?no-trim注:這個要格外注意一下,這個參數(shù)略微有些問題,如果沒有了解帶來的后果的話還是使用--no-trim更安全些,我會在后面的仔細講一下.
–crop
與上面的一條類似,移除圖片四周的透明像素,不保留原始尺寸,保存為一張更小的圖片示例:--crop注:同上,要小心使用,盡量不在這里使用,而是改為前期用其它工具處理
–trim-threshold
與Trim類似,只是這個選項有一個參數(shù),表示剪裁掉alpha值小于這個參數(shù)的像素,取值0~255,默認為0.示例:--trim-threshold
–disable-auto-alias
關(guān)閉自動命名,什么意思呢?TP在打包時會自動識別相同的圖片,最終在大圖里只會保留一張,這樣會更加的節(jié)省資源,這個參數(shù)將會關(guān)閉這個功能示例:--disable-auto-alias注:這樣參數(shù)還是不要設(shè)置的好
其他常用選項
–opt
設(shè)置輸出圖片的像素格式 一般默認RGBA8888示例:--opt
RGB444注:這個選項一般不做更改,如果想壓縮資源體積的話,可以改為RGBA4444這樣圖片可以減小一半的體積.具體大家可以看下面這張圖:

常見問題
錯誤:error: Error in sprite:.png:
Failed to load image!解決方案:?去掉目標路徑末尾的.png試試.
錯誤:error: Could not fit all sprites into the sprite sheet.解決方案:
1.查看有無設(shè)置--width
or --height,這個錯誤通常是由于輸出圖片的尺寸太小導(dǎo)致的.
2.查看有無--max-width/--max-height/--max-size,沒有的話加上,有的話將參數(shù)值改大一些.
錯誤:error: Sprite sheet size is too small.解決方案:參見上個錯誤中的解決方案2,--max-width/--max-height/--max-size默認值為2048,試著改成4096試試,如果解決了,不要高興,因為大多數(shù)移動設(shè)備都不支持這個尺寸,可以考慮分開打包.
錯誤:error: Unknown argument –XXX - please check parameters or visit?http://www.texturepacker.comfor
newer version解決方案:?檢查XXX的拼寫是否正確
問題:程序中獲得圖片的尺寸與打包前不一致解決方案:檢查參數(shù)是否含有--crop,有的話刪除,有沒有--no-trim,沒有的話加上.
后記
講了那么多參數(shù),其實常用的沒有幾個,下面這個是我最終使用的命令:
TexturePacker --sheet out.png --data out.plist --allow-free-size --no-trim --max-size 1024 --format cocos2d animation
【常見問題】
怎么把TexturePacker的plist切成單獨小圖?1、安裝python-2.7.6.amd64.msi并配置環(huán)境變量 Path :C:\Python27

2、檢驗python是否安裝配置成功:打開cmd,輸入python,如果出現(xiàn)以下界面,則說 明你的python安裝成功了

3、安裝第三方的模塊02_Pillow-2.4.0.win-amd64-py2.7.exe
4、創(chuàng)建一個文本,修改后綴為py,建議命名:unpack_plist.py,將unpack_plist.py放到你Python27安裝目錄里
代碼如下:
#!python
import os,sys
from xml.etree import ElementTree
from PIL import Image
def tree_to_dict(tree):
d = {} for index, item in enumerate(tree): if item.tag == 'key': if tree[index+1].tag == 'string':
d[item.text] = tree[index + 1].text
elif tree[index + 1].tag == 'true':
d[item.text] = True
elif tree[index + 1].tag == 'false':
d[item.text] = False
elif tree[index+1].tag == 'dict':
d[item.text] = tree_to_dict(tree[index+1]) return d
def gen_png_from_plist(plist_filename, png_filename):
file_path = plist_filename.replace('.plist', '')
big_image = Image.open(png_filename)
root = ElementTree.fromstring(open(plist_filename, 'r').read())
plist_dict = tree_to_dict(root[0])
to_list = lambda x: x.replace('{','').replace('}','').split(',') for k,v in plist_dict['frames'].items():
rectlist = to_list(v['frame'])
width = int( rectlist[3] if v['rotated'] else rectlist[2] )
height = int( rectlist[2] if v['rotated'] else rectlist[3] )
box=(
int(rectlist[0]), int(rectlist[1]), int(rectlist[0]) + width, int(rectlist[1]) + height,
)
sizelist = [ int(x) for x in to_list(v['sourceSize'])]
rect_on_big = big_image.crop(box) if v['rotated']:
rect_on_big = rect_on_big.rotate(90)
result_image = Image.new('RGBA', sizelist, (0,0,0,0)) if v['rotated']:
result_box=(
( sizelist[0] - height )/2,
( sizelist[1] - width )/2,
( sizelist[0] + height )/2,
( sizelist[1] + width )/2
) else:
result_box=(
( sizelist[0] - width )/2,
( sizelist[1] - height )/2,
( sizelist[0] + width )/2,
( sizelist[1] + height )/2
)
result_image.paste(rect_on_big, result_box, mask=0) if not os.path.isdir(file_path):
os.mkdir(file_path)
outfile = (file_path+'/' + k).replace('gift_', '')
print outfile, "generated"
result_image.save(outfile)if __name__ == '__main__':
filename = sys.argv[1]
plist_filename = filename + '.plist'
png_filename = filename + '.png'
if (os.path.exists(plist_filename) and os.path.exists(png_filename)):
gen_png_from_plist( plist_filename, png_filename ) else:
print "make sure you have boith plist and png files in the same directory"

5、在python27安裝目錄下按Shift鍵加鼠標右鍵在此處打開命令窗口,將需要切成單獨小圖片的
TexturePacker的plist圖片放到python 27安裝目錄里
命令行: python unpack_plist.py shop文件名稱
比如: python unpack_plist.py shop(我的plist文件全名為 ui.plist)


6、這時就已經(jīng)完全把圖片切成小圖片了,在Python27安裝目錄里就會出現(xiàn)shop文件夾,里面的圖片就是小圖片
如何利用TexturePacker加密Cocos2d-x圖片資源?
打開 TexturePacker,把圖片素材拖入到 Sprites 里面,為了能將 TexturePacker 導(dǎo)出的.plist 文件能成功導(dǎo)入到 cocos studio 里面,這里必須選擇 Framework 為 cocos 2d v2 (old CocoStudio),然后 Texture format 保持默認的 PNG-32。點擊 Publish sprite sheet。假設(shè)設(shè)置的 Data file 為 demo.plist,則會看見 demo.plist 和 demo.png 文件生成了。


打開 Cocos Studio,把第一步生成的demo.plist 和 demo.png 導(dǎo)入(或者直接拖過去),創(chuàng)建一個測試的 demoLayer,直接可以把 plist 里面的圖片應(yīng)用到 layer 的設(shè)計上面。最后通過 Cocos Studio 導(dǎo)出,我們只需要demoLayer.csb 二進制文件。


再通過 TexturePacker 創(chuàng)建加密的.plist 和.pvr.ccz 文件。我們把 Framework 改成 cocos2d-x,設(shè)置好 Content Protection。注意里面的那32個16進制數(shù)字是密鑰,稍后需要我們才在c++代碼里面設(shè)置好。


創(chuàng)建一個 cocos2d-x 的 c++或者 lua 工程(e.g. cocos new -p demo.test.com -l cpp demo). 然后把第二次生成的demo.plist 和那個 demo.pvr.ccz 導(dǎo)入到資源里面(這里以 Xcode 為例)。添加代碼來加載 cocos studio 生成的.csb 文件。也可以直接用那些圖片資源。

運行程序,.csb 文件和加密的圖片都被成功加載。而我們發(fā)布的資源只有.plist 和那個加密的.pvr.ccz 文件,一定程度的保護了我們的版權(quán)。




































