一, TexturePacker简介
TexturePacker是一款贴图打包工具。
安卓、iOS手机系统是使用OpenGL ES来渲染的,OpenGL ES纹理要求纹理的宽和高都是2的n次幂的倍数;渲染速度方面,OpenGL ES要求切换的纹理少。所以将图片拼成大图片,这样可以减少内存的浪费也能提升渲染速度。
TexturePacker支持的游戏引擎:
2D ToolKit
AndEngine
AppGameKit
cocos2d
Sparrow/Starling
Spine
SpriteKit(Objective-c)
SpriteKit(Swift)
......
打开新建工程引导页,一个一个数下来,支持40余引擎、框架。
支持的太多了,我们就只看看SpriteKit(Swift)怎么用,新建一个SpriteKit(Swift)工程。
从easy icon网站上下载几个图标,放到一个文件夹里,将文件夹拖动到“No sprites added yet”区域,如下:
在右侧的Atlas bundle处设定图片存放的路径,Swift class file处设定生成的Swift文件存放处。Swift文件是可选的,不设定的话就不生成Swift文件。
publish后的文件如下:
文件夹里放置了两个文件:一个拼装大图后的文件,另一个plist文件存放原来小图在大图中的信息等;
一个Swift文件:
// ---------------------------------------
// Sprite definitions for 'dog'
// Generated with TexturePacker 3.6.0
//
// http://www.codeandweb.com/texturepacker
// ---------------------------------------
import SpriteKit
class dog {
// sprite names
let DOG0 = "dog0"
let DOG1 = "dog1"
let DOG2 = "dog2"
// load texture atlas
let textureAtlas = SKTextureAtlas(named: "dog")
// individual texture objects
func dog0() -> SKTexture { return textureAtlas.textureNamed(DOG0) }
func dog1() -> SKTexture { return textureAtlas.textureNamed(DOG1) }
func dog2() -> SKTexture { return textureAtlas.textureNamed(DOG2) }
// texture arrays for animations
func dog() -> [SKTexture] {
return [
dog0(),
dog1(),
dog2()
]
}
}
这个文件简单明了:对生成的图片进行一下封装:加载大图纹理,提供返回每一个小图纹理的接口,提供返回所有小图纹理的接口;
这样就很方便的在代码中引用相关纹理生成SKSpriteNode对象了。
二,批量发布tps文件
嗯,再想一个publish tps的问题,设想这么一个场景:我们有一批图,对应多个tps文件,现在这批图都进行优化,我们怎么publish出来给我们的程序用呢?挨个打开tps,再点击publish按钮?这样的工作做起来,只能呵呵了。
还好,TexturePacker给我们提供了命令行操作方式,首先安装:在TP里点TextturePacker/Install Command Line Tool,安装到默认路径。打开命令行,输入:TexturePacker,可以看到输出:
Usage: TexturePacker [options] [<*.png|gif|tif|jpg|swf|...>] [<imagefolder>] [<*.tps>*]
挨个儿看各个参数,会找和图片相关的参数
--data <filename> Name of the data file to write
--class-file <filename> Name of the class output file (spritekit-swift)
也就是说我们可以这么publish tps:
TexturePacker *.tps --data * --class-file *.swift
这样的话我们也就可以写一个脚本遍历一个目录下的所有的tps文件,发布到一个固定目录下:
#!/bin/sh
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
echo dir=$DIR
#设置放置发布目录设置到当前目录的上级目录中的dst文件夹
DstDir="../../Plane/Plane/Img.atlasc"
rm -rf $DstDir
mkdir $DstDir
#遍历当前目录所有的tps
AllTps=`find $DIR -name "*.tps"`
echo $AllTps
for tps in $AllTps
do
# 取得tps文件的名
echo $tps
file=`echo ${tps##*/}`
fileName=`echo $file|awk -F '.' '{print $1}' `
TexturePacker $tps --data $DstDir/$fileName --class-file $DstDir/$fileName.swift
done
以上脚本相对布局如下图: