Ama*_*oor 5 xcode assets ios sprite-kit swift
所以我正在 SpriteKit 中开发一款游戏。我有一个为玩家生成关卡的函数。该函数使用放置在 assets.xcassets 中的图像来生成关卡。游戏有多个主题,分别是火水和电。每个主题都有自己的一组名称相同的图像,但每个主题图像组都在其单独的文件夹/组中。我是否可以以编程方式告诉函数使用特定文件夹,以便我可以在不重命名图像的情况下为其他主题生成级别。或者我是否可以使用多个资产文件夹并更改函数在运行时使用的一个。每次玩家重新启动关卡时,我都想使用随机主题。
您可以使用 Sprite Atlas(也称为 Sprite Sheet)。
如果你不知道我在说什么,看看这两个不错的视频:
如果您现在已经观看了视频,您就会知道 Sprite Atlas 的主要目标是将所有且仅(尽可能)当前场景或关卡所需的图像加载到 GPU 中。这种方式绘制每一帧变得更快,因为所有资源都已经在 GPU 和 CPU 上,只需要传输坐标。
好的,但它如何解决您的问题?
Xcode 允许您为每个 Sprite Atlas 创建一个命名空间。所以你可以对不同 Sprite Atlas 中的资源使用相同的名称。
这很简单。
Asset Catalog+您在下图中看到的按钮New Sprite Atlas
5. 现在单击Provides Namespace右侧的 复选框。
就是这样。现在只需将您的图像放入 Sprites 文件夹,以便将它们添加到您的精灵图集中。
在这个例子中,我将把 Sprite Atlas 重命名为Sprites0,并将添加一个名为 的红色圆圈circle。
然后
Provides Namespace复选框Sprites1circle。这是最终结果
现在让我们看看如何使用它。
导入 SpriteKit
class GameScene: SKScene {
override func didMove(to view: SKView) {
let textureAtlas0 = SKTextureAtlas(named: "Sprites0")
let texture0 = textureAtlas0.textureNamed("circle")
let sprite0 = SKSpriteNode(texture: texture0)
sprite0.position.y = 100
addChild(sprite0)
let textureAtlas1 = SKTextureAtlas(named: "Sprites1")
let texture1 = textureAtlas1.textureNamed("circle")
let sprite1 = SKSpriteNode(texture: texture1)
sprite1.position.y = -100
addChild(sprite1)
}
}
Run Code Online (Sandbox Code Playgroud)
第 1 步:加载 Sprite Atlas
let textureAtlas0 = SKTextureAtlas(named: "Sprites0")
Run Code Online (Sandbox Code Playgroud)
第 2 步:从纹理图集中加载特定纹理
let texture0 = textureAtlas0.textureNamed("circle")
Run Code Online (Sandbox Code Playgroud)
第 3 步:根据需要使用纹理
let sprite0 = SKSpriteNode(texture: texture0)
sprite0.position.y = 100
addChild(sprite0)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2983 次 |
| 最近记录: |