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

时间:2016-07-06 01:13:49

标签: swift image sprite-kit skspritenode 2d-games

我正在使用SpriteKit编写一个游戏,我正在编写一个部分,其中“级别”从文本文件中加载,在一个文本文件中以“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是一个包含扩展SKNode的级别的类,因此我向self添加了墙,然后将该SKNode添加到场景中。

2 个答案:

答案 0 :(得分:1)

在不诉诸第三方支持的情况下回答您的问题

使用第二个选项(复制选项)

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

答案 1 :(得分:0)

开发项目的方法记住了TileMap。请注意,因为你可以花很多时间来加载每个元素,你可以准备你的关卡,你会有更多的乐趣。

有数千个教程可以帮助您使用Sprite-kit和Swift构建TileMap。他们中的许多人使用这个名为 JSTileMap here

的GitHub库

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

  • 使用Tiled
  • 创建地图
  • 将地图添加到游戏
  • 滚动地图以关注播放器

  • 使用对象图层。

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

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