在 SpriteKit 项目中使用精灵图集、纹理图集或资产目录

Posted

技术标签:

【中文标题】在 SpriteKit 项目中使用精灵图集、纹理图集或资产目录【英文标题】:Using a sprite atlas, texture atlas, or asset catalog in SpriteKit projects 【发布时间】:2018-04-16 21:11:02 【问题描述】:

Apple 推荐的在 SpriteKit 项目中组织资源的方式在引擎的历史进程中发生了很大变化。旧方法中也存在一些错误,这些错误阻碍了这些做法的实施并需要解决方法。关于 SO 的旧 Q&A 充满了过时的信息,或者被关于处理不再存在的错误的信息所混淆。需要在 SO 上发布一篇文章,说明如何实施该问题的当前解决方案,而不会因讨论过时的工作流程或已解决的错误而分心。所以问题是这样的:

如何在 SpriteKit 项目中组织我的图像资源?一些 Apple 文档对 use texture atlases to improve performance 说。但是SKTextureAtlas class reference 描述了创建纹理图集和精灵图集的选项。我应该使用哪一个以及如何实现它?

【问题讨论】:

【参考方案1】:

在资产目录中创建精灵图集。您可以获得纹理图集的性能优势(旧的方法是手动创建纹理图集)以及在资产目录中组织图像资产的便利性。

In this WWDC video 在时间戳 18:06,发言人说:

在资产目录中以正常方式组织您的图像资产:组 它们,在精灵图集中命名它们。这是自动的 在构建时创建纹理图集,您可以通过 SKTextureAtlas 类。

class reference doc 中证实了这一点(尽管不如视频中清晰),其中写道:

创建纹理图集的首选机制是在资源中 目录...精灵图集提供了纹理图集的优点 具有资产目录的管理功能。

视频和课程参考文档都提到,这种做法可以让您利用 app thinning(在视频中详细讨论)。

默认情况下,新的 Xcode 游戏项目是使用资产目录创建的。或者,您可以通过选择 File > New > File... 然后从 Resource 中选择 Asset Catalog 来为您的项目添加新的资产目录> 出现的屏幕中的部分。

要添加精灵图集,首先在项目导航器中选择您的资产目录。然后在编辑器区域的大纲视图中右键单击或选择加号按钮 (+)。从出现的下拉列表中选择New Sprite Atlas

您在精灵图集中组织的图像资源将在构建时自动形成纹理图集。您可以通过代码从纹理图集中加载图像:

let atlas = SKTextureAtlas(named: "Monster")
let frame1 = atlas.textureNamed("monster-walk1.png")

【讨论】:

我遇到的资产目录+图集的一个问题是“定义命名空间”功能不起作用。因此,您不仅必须在您的 altas 内部,而且在全球范围内为所有图像使用唯一名称。尽管这可能是一个问题,但取决于您的资源命名方案。我说的是 Xcode 9.4.1 @Igor Vasilev:我猜命名空间崩溃的发生是因为所有图像都在媒体库中全局可用。这使得在动作场景 (Actions.sks) 中设置动画变得非常容易:设置 AnimateWithTextures 动作,将图像从媒体库拖到属性检查器的纹理字段中,您无需访问按名称命名纹理图集并将其内容转换为 SKTextures 数组。

以上是关于在 SpriteKit 项目中使用精灵图集、纹理图集或资产目录的主要内容,如果未能解决你的问题,请参考以下文章

SpriteKit 关卡编辑器纹理图集

如果我稍后使用 SKTextureAtlas,Sprite Kit 是不是会多次加载纹理图集?

在 SpriteKit 中呈现图像的最佳方式

“纹理图集不支持模板渲染”SpriteKit 和 Xcode

SpriteKit animateWithTextures 不适用于纹理图集

使用纹理图集时 SpriteKit 中的高内存使用率