jaxreiff
jaxreiff

Reputation: 513

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

I'm programming a game in SpriteKit and am coding a section where the "level" is loaded in from a text file, placing a wall node in every spot marked by an "x" in the text file. However, if I know that there are going to be a lot of nodes, and they're all being loaded from the same "wall.png" file, is it more efficient to load the image once and then duplicate the object each time needed, or just load the image each time?

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 in this scope is a class holding the level that extends SKNode, so I'm adding walls to self and then adding that SKNode to the scene.

Upvotes: 3

Views: 382

Answers (2)

Knight0fDragon
Knight0fDragon

Reputation: 16837

To answer your question without resorting to 3rd party support

Go with the 2nd option (the copy option)

This will use the same texture across multiple sprites, where as the 1st choice creates a new texture every iteration.

Upvotes: 1

Alessandro Ornano
Alessandro Ornano

Reputation: 35402

The approach to developing your project remember me a TileMap. Pay attention because you can earn a lot of time instead to load each elements, you can prepare your levels and you have more fun.

There are thousand of tutorials that can help you to build a TileMap with Sprite-kit and Swift. Many of them use this GitHub library called also JSTileMap here

In these tutorials you can learn to how to:

  • Create a map with Tiled
  • Add the map to the game
  • Scroll the map to follow the player

  • Use object layers.

It's very simple , for example you can load a tmx map:

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

Upvotes: 0

Related Questions