怎么用texturepacker plist做成plist

1022人阅读
C/C++(30)
在使用TexturePacker打包工具之前先对动画的每一帧图片命名,我这里选取的cocos2d-x实例程序里面的图片,为了方便只提取了前面4帧的图片
然后打开安装好的TexturePakcer,,该工具需要购买激活,我这里是选择的试用。打开后点击Add Sprites然后选择需要添加的图片文件,至于该工具里面的各种调整这里不做过多的解释,最后点击Publish保存生成好的plist文件以及打包后的png图片。
打包后生成的文件如下,因为是选择的试用,生成的图片上会有奇怪的文字以及颜色发生改变,如果使用购买激活后的就不会这样...
打包工作就OK了,然后就是使用生成的plist文件创建精灵动画
精灵动画执行效果(下面只是动画的一个截图)
欢迎转载!转载时请注明出处:
如果你还没接触到过这个工具,那你今天运气非常好了...
下载地址:
说明:这款软件需要购买的,能够发一百多块买到这么好的工具还是挺值得,可以工具的价钱,肯定他带给的的好处远不止这个数字..呵呵!
1、为什么要用这个工具呢?有什么好处?
第一点:内存问题, OpenGL ES& 纹理的宽和高都要是2次幂数, 以刚才的例子来说,&假如 start.png 本身是 480x320, 但在载入内存後, 它其实会被变成一张 512x512 的纹理, 而start.png 则由 101x131 变成 128x256,&默认情况下面,当你在cocos2d里面加载一张图片的时候,对于每一个像素点使用4个byte来表示--1个byte(8位)代表red,另外3个byte分别代表green、blue和alpha透明通道。这个就简称RGBA8888。
因此,如果你使用默认的像素格式来加载图片的话,你可以通过下面的公式来计算出将要消耗多少内存来加载:
  图像宽度(width)×图像高度(height)×每一个像素的位数(bytes per pixel) = 内存大小
  此时,如果你有一张512×512的图片,那么当你使用默认的像素格式去加载它的话,那么将耗费
  512×512×4=1MB(好多啊!)
第二点:再看看关於渲染速度方面, OpenGL ES 上来说我们应该尽量减少渲染时切换纹理和 glDrawArray 的呼叫, 刚才的例子每画一个图像都会切换一次纹理并呼叫一次 glDrawArray , 我们这里只画3样东西, 所以不会看到有什麽问题, 但如果我们要渲染几十个甚至几百个图像 , 速度上就会被拖慢. 很明显这并不是我们所想要的..
估计就这两点就说服了你吧~&& 至少我是了...呵呵!
2、认识TexturePacker的界面
我框出来的都是我们常用和一些必须点到的地方
Data Format:导出什么引擎数据,默认cocos2d,下拉列表中有很多,基本常用的引擎都支持了
Data File :导出文件位置(后缀名.plist)
Texture Format:纹理格式,默认png
Image format:图片像素格式,默认RGBA8888...根据对图片质量的需求导出不同的格式
Dithering:抖动,默认NearestNeighbour,(如果图像上面有许许多多的“条条”和颜色梯度变化)将其修改成FloydSteinberg+A
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)
3、程序中更改资源加载方式
我就是用的上一个例子,然后将start.png,grossinis.png,grossinis_sister1.png,grossinis_sister2.png打包成一个image.plist和image.png.程序我就不重新全部上传了,就自上传和上一个例子不同的地方,没有的朋友就可以去第一篇文章下载工程,今后我们还会用到的,会用这个工程来开发我们的第一个游戏...游戏暂时保密...呵呵!
SpriteTestLayer.cpp(就只改了这个这个文件)
运行结果:
哈哈! 效果一样,没问题了,以后就用这种方法加载资源图片吧!
如果讲述得有误,或者不对的地方,还望各位指出!
参看资料:
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:216588次
积分:3117
积分:3117
排名:第11573名
原创:62篇
转载:188篇
(1)(3)(1)(1)(1)(1)(8)(5)(4)(4)(1)(6)(2)(22)(2)(1)(4)(6)(2)(9)(2)(4)(1)(3)(1)(5)(2)(3)(1)(4)(3)(7)(2)(5)(1)(2)(2)(7)(7)(6)(7)(6)(4)(5)(2)(18)(5)(21)(30)
(window.slotbydup = window.slotbydup || []).push({
id: '4740881',
container: s,
size: '200,200',
display: 'inlay-fix'随笔 - 21&
文章 - 0&评论 - 0&trackbacks - 0
&&&&做cocos2d已经有一段时间,个人感觉cocos2d比较节省内存的地方就是可以把多个图片做成一个SpriteSheet,这样使图片的使用率达到了最高,并且在cocos2d中使用起来也非常简单。但是要注意的是,制作一个SpriteSheet也是需要工具的,以前的时候朋友推荐我用Zwoptex,用起来也很方便。可是慢慢的我又发现了一个工具TexturePacker。&&&&当我们来比较TexturePacker和Zwoptex的特性的时候,TexturePacker似乎包含了Zwoptex90%的功能。但是,TexturePacker有三个杀手锏级别的功能是Zwoptex所没有的。
抖动,抖动,抖动.&噢,我是多么喜欢抖动啊!在过去,有时我想使用比较低的像素格式,但是我不能,因为它看起来效果很不好。但是TexturePacker内置的抖动功能使得图片看起来还是那么棒,尽管此时的图片质量很低。&
pvr.ccz 支持.&它能够使游戏启动得更快, 而且会使你的可执行程序更小. 现在我不用花很长时间来上传和下载我以前写的应用程序了,我可以很快的下载并更新。
命令行工具支持.&一旦你花一点时间把TexturePacker集成到你的Xcode中去,你将会热爱生活。它是如此地方便,特别是在整个开发过程中,美工对图片改来改去的时候。
&&&&我从官方网站下载的,安装了以后发现是个Essential版本的,如果要使用Pro版本的话需要购买License,然后我就去注册,如果我能提供我的技术博客的地址的话,他就会给我发一个License。于是我好不犹豫的写上了,然后提交,留下了我的邮箱,没过多久,他就给我发了License,他还说能不能写一些关于TexturePacker的介绍,可是拖了这么久才写。并且这个License是通用的,跟机器是没有绑定的,因此可以让无数个用户使用。
&&&&现在我们来使用这个工具吧!首先可以看到的是默认页面:
&&&&和普通的程序相同,顶部是工具栏,左边是生成spritesheet的设置,中间可以看到加载图片的视图,右面是基本图片的视图。随便创建了个文件夹,然后添加选择Add Folder,把文件夹添加到资源中,然后设置好大小,就可以导出了,导出生成了png文件和一个plist文件。把这两个文件导入到cocos2d工程就可以用了。
生成的plist文件为:
阅读(...) 评论()U3D Texturepacker导出的plist,可以自定义纹理的名称么?不行的话,就只能自己解析xml,然后修改了
天晴Texturepacker导出的plist,可以自定义纹理的名称么?不行的话,就只能自己解析xml,然后修改了狗主为什么要这么做呢灰狗内存倒是只有够用就能支持任意,但是显存支持的大小就要受硬件限制(甚至有些直接不支持非2的整数次方大小的图片)。天晴test1.plist&{1.2.3.png}test2.plist&{1.2.3.png}把test1&test2都缓存到SpriteFrameCache中的话,test2会覆盖test1test1.plist&{1.2.3.png}test2.plist&{5.6.7.png}这样就不会覆盖了可能我提出的问题有点奇葩灰狗@天晴&plist里面这个名字等于图片名字,如果要去掉扩展名(比如.png)的话,勾上这个就行了:天晴没法自定义&前缀或后缀吧&&&比如:&attack%d.png没找到,应该没有,看来还是自己解析xml吧或者,自己改代码开源引擎就是好
------分隔线----------------------------
赞助商链接
赞助商链接还原TexturePacker plist 文件以及图片的方法 (切开各小图片) - qiubs - 博客园
随笔 - 0, 文章 - 371, 评论 - 5, 引用 - 0
Python 脚本:(来自网络)
unpack_plist.py
命令行: python unpack_plist.py &plist文件名称&
例子: python unpack_plist.py &common & & &## plist文件全名为 common.plistwindows7 下相关python配置:
import os,sys
from xml.etree import ElementTree
from PIL import Image
def endWith(s,*endstring):
array = map(s.endswith,endstring)
if True in array:
return True
return False
# Get the all files & directories in the specified directory (path).
def get_recursive_file_list(path):
current_files = os.listdir(path)
all_files = []
for file_name in current_files:
full_file_name = os.path.join(path, file_name)
if endWith(full_file_name,'.plist'):
full_file_name = full_file_name.replace('.plist','')
all_files.append(full_file_name)
if os.path.isdir(full_file_name):
next_level_files = get_recursive_file_list(full_file_name)
all_files.extend(next_level_files)
return all_files
def tree_to_dict(tree):
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])
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] )
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
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__':
currtenPath = os.getcwd()
allPlistArray = get_recursive_file_list(currtenPath)
for plist in allPlistArray:
filename = plist
print filename
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 )
print "make sure you have boith plist and png files in the same directory"
1. 安装python2.7.3
2. 在此处下载 安装 (这是最简洁的方式,已经编译好png,zip等处理)&
注:一定要安装
Pillow-2.4.0.win-amd64-py2.7.exe}

我要回帖

更多关于 texturepacker用法 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信