TP:23AFDAD5
因为要使用的资源文件是一组小的图片, 我们需要先将其生成一张大的图片,将所有小图片都包含在其中, 最好的方式是使用第三方工具来实现这个功能。
1. 首先下载TexturePacker 写该文章时最新的版本是4.1.0
下载地址为:https://www.codeandweb.com/blog/2013/09/23/spritekit-animations-and-textureatlases
2. 启动TexturePacket拖动自己准备好的图片,直接拖动到工作区, 他会自动变成一张图片。
我这里面做了10个数字的图片,拖到工程中后效果如下:
3. 拖入资源文件后, 需要选择一下数据格式, 因为我用的是苹果自己的SpriteKit,而不是cocos之类的第三方框架, 因此需要手动修改一下DataFormat, 如下图所示:
4. 通过Atlas bundle来设置输入文件所在的位置,我们这里指定生成的文件名为textureNumber.atlasc,然后设置Header file如下图所示,都设置好后,点击Publish Sprite Sheet按钮,如果没有出现问题我们要的文件就生成了.
5. 打开Finder 找到我们上面指定的的文件位置,你会看到生成了一个目录,和一头文件,目录中还包含了两个文件,一个png和一个plist.
6. 拖动生成的目录和头文件到我们的工程中(Xcode), 在弹出的提示对话框中, 选择 create folder references 以及 确认 add to targets 选中.
7. 接下来我们就可以使用我们刚刚加进来的资源文件了,首先在我们要使用的场景文件中加上刚刚生成的头文件的引用,#import"textureNumber.h",头文件中包含了所有资源的宏定义,便于我们使用,文件内容如下:
8. 接下来在我们现有的场景GameScene.m 文件中的didMoveToView方法中加入如下测试代码:
9. 然后编译运行我们现有的游戏程序,就能看到效果,在屏幕的中下方出现了数字0的图片。
10. 那么现在问题来了, 一个游戏里面会有多张这类的图片,我可能会按分类增加多个atlasc贴图集,比如数字图片集,子弹图片机,角色图片集等等,为了目录分类更清楚,我创建了一个resource目录,将多个图片集都放到统一目录下管理(蓝色文件夹),会在打包的app中带目录的形式,如下图所示。
11. 为了做一个试验,我第二次创建的贴图集里面小图片名跟第一次创建的图片名称完全一样,也是0,1,2,3.....这样会出现什么现像呢,直接运行之前的程序看一下效果。
如下图所示, 我们看到之前的0没有了, 出现了一个红色叉, 这个表示资源加载出错了,找不到我们资源了。
12. 这里面有两个问题, 一个是加了一层目录, 原来路径找不到了, 另个一个是图片名重复, 系统也不知道加载哪个, 这样我们就应变先加载指定贴图集,再取其中包含的贴图资源,解决方式如下:
13.再一次编译运行程序, 最好先clean一个工程,然后再编译运行,我们看到贴图0又显示出来了, 虽然跟之前结果一样, 但实现方案完全不同, 后面的方式更宜于使用。
10. 总结, 使用贴图集的方式加载可以有效提升游戏的执行效率,而且图片资源过多时,更宜于分类的管理,是游戏中更好的资源图片的使用方式。