SpriteKit中应用TexturePacker

 一, 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
以上脚本相对布局如下图:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值