Swift SpriteKit来自同一图像的多个节点:单独加载还是复制?

Swift SpriteKit来自同一图像的多个节点:单独加载还是复制?,swift,image,sprite-kit,skspritenode,2d-games,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(imag

我正在用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


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

开发项目的方法请记住我一个TileMap。注意,因为你可以赢得很多时间来加载每一个元素,你可以准备你的水平,你有更多的乐趣

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

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

  • 创建平铺贴图
  • 将地图添加到游戏中
  • 滚动地图以跟随播放器

  • 使用对象层

它非常简单,例如,您可以加载
tmx
map:

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

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

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


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

尝试两种方法,并计算在从iOS获得内存不足警告之前可以添加多少。我考虑的更多是加载它们的速度,我假设加载后两者都会有相似的内存使用情况?我认为大致相同,代码的复杂性是2^n由两个循环驱动,行self.addChild(wall.copy())或let wall=SKSpriteNode(imagename:“wall”)可能不会增加更多的时间。您可以尝试在循环和检查的开始和结束时添加增量时间。谢谢!如果我制作了一个纹理,并在一堆SKSpriteNodes的初始值中使用该纹理,该纹理会被引用还是被复制?引用,如果使用纹理地图集。它也将在任何地方被引用
let tiledMap = JSTileMap("mapFileName.tmx") //map name
if t = tileMap {
    self.addChild(tiledMap)
}