SpriteKit 来自同一图像的大量节点:单独加载还是重复加载?

SpriteKit Lots of Nodes from Same Image: Load Separately or Duplicate?

我正在用 SpriteKit 编写一个游戏,并且正在编写一个部分,其中 "level" 从文本文件中加载,在每个由 "x" 标记的位置放置一个墙节点文本文件。但是,如果我知道会有很多节点,并且它们都是从同一个 "wall.png" 文件加载的,那么加载一次图像然后在每次需要时复制对象是否更有效,还是每次只加载图像?

for line in lines {
  for letter in line {
    if letter == "x" {
      let wall = SKSpriteNode(imageNamed: "wall")
      self.addChild(wall)
    } else { ... }
  }
}

VS

let wall = SKSpriteNode(imageNamed: "wall")
for line in lines {
  for letter in line {
    if letter == "x" {
      self.addChild(wall.copy())
    } else { ... }
  }
}

self 在此范围内是一个 class 持有扩展 SKNode 的级别,因此我将墙添加到 self,然后将该 SKNode 添加到场景中。

开发项目的方法记得我一个TileMap。请注意,因为您可以赚取很多时间而不是加载每个元素,您可以准备关卡并且玩得更开心。

有成千上万的教程可以帮助您使用 Sprite-kit 和 Swift 构建 TileMap。他们中的许多人使用这个 GitHub 库,也称为 JSTileMap here

在这些教程中,您可以学习如何:

  • 使用 Tiled 创建地图
  • 将地图添加到游戏中
  • 滚动地图跟随玩家

  • 使用对象图层。

非常简单,例如您可以加载 tmx 地图:

let tiledMap = JSTileMap("mapFileName.tmx") //map name
if t = tileMap {
    self.addChild(tiledMap)
}

无需借助第 3 方支持即可回答您的问题

选择第二个选项(复制选项)

这将在多个 sprite 中使用相同的纹理,而第一个选择每次迭代都会创建一个新纹理。