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

5
苹果公司在SpriteKit项目中组织资源的推荐方式已经随着引擎的发展而大幅改变。旧方法中也存在缺陷,阻碍了这些实践的实施并需要解决。旧的SO问答页面充满了过时的信息或受到与不存在的错误相关的信息的干扰。需要在SO上发布一篇文章,介绍如何实现此问题的当前解决方案,而不会被关于过时工作流程或已解决错误的讨论所分心,因此问题是:

我该如何组织我的SpriteKit项目中的图像资源?一些苹果文档指出应该使用纹理图集来提高性能。但是SKTextureAtlas类引用描述了创建纹理图集和精灵图集的选项。我应该使用哪个并如何实施呢?

1个回答

9
在资产目录中创建一个精灵图集。您可以获得具有纹理图集的性能优势(旧方法是手动创建纹理图集),并且还可以轻松地组织图像资产在资产目录中。在这个WWDC视频的18:06时间戳(链接)中,演讲者说:在资产目录中以正常方式组织图像资产:将它们分组,在精灵图集中命名。这样做会在构建时自动创建纹理图集,您可以通过SKTextureAtlas类检索它们。在类参考文档中确认了这一点(尽管不如视频中清晰),其中提到:“创建纹理图集的首选机制是在资产目录内...精灵图集提供了纹理图集的优点和资产目录的管理功能。”

视频和课堂参考文档都提到,这种做法可以让你利用应用瘦身(在视频中详细讨论)。

默认情况下,新的Xcode游戏项目会创建一个资源目录。或者,您可以通过选择文件 > 新建 > 文件...,然后在出现的屏幕中从资源部分选择资产目录来向您的项目添加新的资产目录。

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

Create a new sprite atlas

在精灵图集中组织的图像资产将在构建时自动形成纹理图集。您可以通过代码从纹理图集加载图像:
let atlas = SKTextureAtlas(named: "Monster")
let frame1 = atlas.textureNamed("monster-walk1.png")

1
我遇到的一个关于资源目录和图集的问题是,“定义命名空间”功能无法正常工作。因此,您不仅需要在图集内部,而且全局上为所有图像使用唯一的名称。尽管这可能是一个问题或不是一个问题,这取决于您的资源命名方案。我特别指的是Xcode 9.4.1。 - Igor Vasilev
1
@Igor Vasilev:我猜命名空间崩溃是因为所有图像都在媒体库中全局可用。这使得在Action Scenes(Actions.sks)中设置动画变得非常容易:设置AnimateWithTextures操作,将图像从媒体库拖到属性检查器的Textures字段中,然后您就可以进行设置,而无需按名称访问纹理图集并将其内容转换为SKTextures数组。 - green_knight

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接