(译)在cocos2d里面如何使用Texture Packer和像素格式来优化spritesheet(3)

分类栏目:cocos教程

70

接上回(译)在cocos2d里面如何使用Texture Packer和像素格式来优化spritesheet(2)

Texture Packer 和XCode集成

  当使用Texture Packer的时候,你可以像这里介绍的一样使用GUI工具,但是你还可以把它集成到Xcode构建过程中去。这样你每一次编译的时候,它都会自动地(如果没有更改,就不会更新)为了更新spritesheet。

  如果你过去用cocos2d写过游戏的话,你肯定明白一遍又一遍地重新生成你的spritesheet是那么的烦人!虽然每次可能都只需要几秒钟的时间,但是老是这样重复地做这样的事,确实很烦。

  因此,让我们更方便地构建我们的工程吧--这里只需要花几秒钟时间,但是却可以为你以后节省大量的时间。右键点击“Resources”,选择“AddNew File...“,然后选择 Mac OS XOtherShell Script,然后选择下一点。并命名为PackTextures.sh,单击完成。

  然后使用下面的代码替换掉PackTextures.sh里面的内容:

#!/bin/sh

TP="/usr/local/bin/TexturePacker"

if [ "${ACTION}"="clean" ]
then
echo "cleaning..."

rm resources/sprites-hd.pvr.ccz
rm resources/sprites-hd.plist

rm resources/flower-hd.pvr.ccz
rm resources/flower-hd.plist

# ....
# add all files to be removed in clean phase
# ....
else
echo "building..."

# create hd assets
${TP}--smart-update
--format cocos2d
--data resources/sprites-hd.plist
--sheet resources/sprites-hd.pvr.ccz
--dither-fs-alpha
--opt RGBA4444
Art/sprites/*.png

${TP}--smart-update
--format cocos2d
--data resources/flower-hd.plist
--sheet resources/flower-hd.pvr.ccz
--dither-fs-alpha
--opt RGB565
Art/flower/*.png

# ....
# add other sheets to create here
# ....
fi
exit 0

  所有Texture Packer GUI界面能够做的事情,命令行工具也能做。如果你在命令行里面输入“TexturePacker”,你将会看到一系列它能够接收的参数说明。

  这个脚本仅仅通过运行TexturePacker来从你的Art目录下读取精灵文件并创建spritesheet--就像你之前用GUI工具所做的一样。你可以通过查看TexturePacker命令行工具帮助来获得更多有关每个参数具体的用法。

  接下来,你需要让你的工程在编译的时间能够运行这个脚本。右键点击Targets,选择“AddNew Target...”,然后选择“External Target”(不是Shell Script Target),然后点击下一步,重命名这个Target为TexturePacker,最后点击Finish。

  然后在你新建的target上面双击,然后把里面的内容设置成下图所示:

  最后一步就是把这个target设置成你的程序的一个依赖。在TextureFun target上面双击,然后选择General tab,再在Direct Dependencies窗口下面选择+按钮。然后从列表中选择TexturePacker,最后单击Add Target。如图下所示:

编译并运行你的程序,你将会从你的构建结果信息中看到Texture Packer的一些输出信息,由此来判断是否一切运转良好。

  如果你看到这些输出信息的话,那么意味着如果你想要增加一些新的文件到spritesheet中,你只需要把这些新的文件拖到指定的文件下面(这里是Art目录),然后重新编译一下,那么就会自动生成新的spritesheet。相反,如果你要移除一些精灵图片,再重新编译一下,也ok。是不是非常方便?

Texture Packer vs. Zwoptex

  首先,让我们再说一遍,我是Zwoptex的超级粉丝。我认为Robert已经做了一件非常好的事情来把这些东西整合到一起,而且我老实说,如果没有这个工具,cocos2d不会走到今天这一步!

  然后,当我们来比较Texture Packer和Zwoptex的特性的时候,Texture Packer似乎包含了Zwoptex90%的功能。但是,Texture Packer有三个杀手锏级别的功能是Zwoptex所没有的。

  • 抖动,抖动,抖动. 噢,我是多么喜欢抖动啊!在过去,有时我想使用比较低的像素格式,但是我不能,因为它看起来效果很不好。但是Texture Packer内置的抖动功能使得图片看起来还是那么棒,尽管此时的图片质量很低。 
  • pvr.ccz 支持. 我喜欢这个特性. 它确实能够使游戏启动得更快, 而且会使你的可执行程序更小. 现在我不用花很长时间来上传和下载我以前写的应用程序了,我可以很快的下载并更新。
  • 命令行工具支持. 一旦你花一点时间把Texture Packer集成到你的Xcode中去,你将会热爱生活。它是如此地方便,特别是在整个开发过程中,美工对图片改来改去的时候。

  尽管Zwoptex非常棒, 但是它目前为此还是没有提供我这里列举的这些功能特性。

  Texture Packer 有一点点贵 ($17.95 vs. Zwoptex’s $14.95), 但是,我认为多花这点钱值得。而且就像  Steffen Itterheim 所说, 2个工具都有所长,都做了一件了不起的工作。

接下来该怎么做呢?

  这里有上面的教程中所使用的示例代码。

  你是一个Texture Packer粉丝 还是一个Zwoptex粉丝呢?不妨在下面一起聊聊吧!或者你有其它一些很好的策略来高效地在cocos2d里面加载纹理的话,请让我知道。:)

ps:使用xcode4的朋友,主要需要注意的就是新增加的Target的参数的一些设置。因为xcode4生成的项目文件夹下并不是直接包含了所有的项目文件,而是一个工程文件和另外一个和项目名字一模一样的文件夹,然后所有的项目有关的源文件和资源文件都放在那个目录下,所以,我们增加的Target里的设置信息应该改成:

"$(PROJECT_DIR)/TextureFun/Resources/PackTexture.sh"

$(SRCROOT)/TextureFun

其实可能需要注意的就是自动生成普清spritesheet,选中AutoSD选项就行了。

但是PackTexture.sh脚本里要相应增加

 ${TP}--smart-update
--format cocos2d
--data resources/sprites-hd.plist
--sheet resources/sprites-hd.pvr.ccz
--dither-fs-alpha
--opt RGBA4444

--auto-sd #只要增加这一行就可以自动生成普清的图片了
Art/sprites/*.png

还有一些软件的设置选项,大家可以参照软件自带的帮助文档。

如果大家在实践的过程中,遇到一些问题,可以留言。