xcode7.3中使用SpriteKit开发游戏时如何使用atlasc贴图集(使用TexturePacker生成)

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. 总结, 使用贴图集的方式加载可以有效提升游戏的执行效率,而且图片资源过多时,更宜于分类的管理,是游戏中更好的资源图片的使用方式。

时间: 2024-10-12 22:50:49

xcode7.3中使用SpriteKit开发游戏时如何使用atlasc贴图集(使用TexturePacker生成)的相关文章

用cocos2d-android开发android游戏时调用box2d中的native本地函数问题

用cocos2d-android开发android游戏时调用box2d中的new World(Vector2,boolean)时,出现如下报错: "java.lang.UnsatisfiedLinkError: Native method not found: com.badlogic.gdx.physics.box2d.World.newWorld:(FFZ)J" 解决方法: 在当前类中添加代码: static { System.loadLibrary("gdx"

silverlight开发游戏中的大坑

最初做<金X>使用silverlight是因为看了深蓝色的右手的silverlight游戏开发教程,这里赞一下,教程写的非常好!做游戏的基础思想均涵盖了,能够给游戏开发的新手提供很多思维方式上的引导. 但是在我个人开发.发布金X的过程中,陆续发现有一些silverlight的大坑,这里给大家分享一下,防止大家犯重复错误. 1.DateTime数据结构的处理 在游戏中,如果想使用DateTime数据结果来存时间的话,一定要慎用DateTime.ToString和DateTime.Parse方法.

在用Kivy开发Python手机游戏时通过Plyer扩展访问Android传感器

这是一篇发表在kivyspacegame上的文章,讲的是如何使用python在你的安卓设备上访问传感器.这篇教程是为这些用kivy开发python移动apps而写的.Kivy运行速度非常快,并且很容易使用.访问博客以获取更多的关于用Kivy开发游戏的教程.也可以看看google play store上的Helios: Mining Adventure游戏程序. 这篇教程将关注plyer,一个可以读取传感器,发送email,以及将文本转成语音,显示通知等等功能的库.如果你正在用python开发移动

.NET程序员项目开发必知必会—Dev环境中的集成测试用例执行时上下文环境检查(实战)

Microsoft.NET 解决方案,项目开发必知必会. 从这篇文章开始我将分享一系列我认为在实际工作中很有必要的一些.NET项目开发的核心技术点,所以我称为必知必会.尽管这一些列是使用.NET/C#来展现,但是同样适用于其他类似的OO技术平台,这些技术点可能称不上完整的技术,但是它是经验的总结,是掉过多少坑之后的觉醒,所以有必要花几分钟时间记住它,在真实的项目开发中你就知道是多么的有帮助.好了,废话不说了,进入主题. 我们在开发服务时为了调试方便会在本地进行一个基本的模块测试,你也可以认为是集

在Xcode7中搭建Python开发环境

如果你是从IOS开发转PYTHON,钟情于Xcode :)说实话,不好用,也许我用的少?======================================在Xcode7中搭建Python开发环境 一.开发环境准备 1.安装Xcode 2.找到Mac OS X上安装Python的路径.OSX系统默认安装了python,默认的路径为/usr/bin/python 二.创建项目 1.在项目菜单中,选择Other选项卡下的"Build External System",然后点击&qu

VS2015+OpenGL4.0开发编译时弹出错误:glaux.lib(tk.obj) : error LNK2019: 无法解析的外部符号 _sscanf,该符号在函数 [email&#160;protected] 中被引用

一.问题描述: VS2015+OpenGL4.0开发编译时弹出如下所示的错误: 1>glaux.lib(tk.obj) : error LNK2019: 无法解析的外部符号 _sscanf,该符号在函数 [email protected] 中被引用 1>glaux.lib(tk.obj) : error LNK2019: 无法解析的外部符号 _vsprintf,该符号在函数 _PrintMessage 中被引用 二.问题原因: VS2015默认编译时将许多标准库采用内联方式处理,因而没有可以链

独立开发游戏越来越容易:Unity 发布旗下的最新游戏引擎 Unity 5,依然有免费版(转)

独立开发者开发游戏正变得越来越容易,因为在游戏设计中很多吃力不讨好的工作可以直接采用像 Epic Games 或 Unity Technologies 这样的游戏引擎来解决.而这几天,游戏引擎商们先后宣布,旗下产品将以更廉价甚至是免费的方式提供给游戏开发者们,开发游戏的门槛又进一步降低了. 先是 Epic Games 在周一通过官方博客宣布旗下 Unreal Engine 4 (虚幻引擎 4)即日起免费提供给 所有开发者使用.只有当开发者利用 Unreal Engine 4 所制作的游戏每个季度

【C语言探索之旅】 第三部分第二课:SDL开发游戏之创建窗口和画布

内容简介 1.第三部分第二课: SDL开发游戏之创建窗口和画布 2.第三部分第三课预告: SDL开发游戏之显示图像 第三部分第二课:SDL开发游戏之创建窗口和画布 在上一课中,我们对SDL这个开源库做了介绍,也带大家配置了SDL的开发环境.请大家按照上一课的步骤创建一个SDL工程,能够初步运行. 如果遇到问题,可以百度,Google相关平台SDL的配置.或者联系小编. 当然了,有些朋友可能会说开发C语言游戏还可以用GTK+这个库,但是个人认为GTK+没有SDL那么适合开发游戏,其创建图形界面的能

执行游戏时出现0xc000007b错误的解决方法

如图,这个错误使无数玩家烦恼. 出现这个错误,可能是硬件的问题,也可能是软件的问题.可是,因为硬件引起该问题的概率非常小,而且除了更换硬件之外没有更好的解决方法,因此本文将具体介绍怎样通过软件解决此问题,这也是大家最关心的. 大致介绍一下这个错误是怎样发生的.这个错误的本意是提示内存错误,可是通常情况下并非内存存在问题,而是因为软件的问题产生了这个错误.到底是什么软件的问题呢?答案是DirectX,而且多数情况下是DirectX 9.0的问题. 或许大家会问了:我玩的游戏都有DirextX 11