2016-07-06 23 views
3

Ich programmiere ein Spiel in SpriteKit und kodiere einen Abschnitt, in dem die "Ebene" aus einer Textdatei geladen wird, und platziere einen Wandknoten an jeder Stelle, die durch ein "x" in der Textdatei markiert ist. Wenn ich jedoch weiß, dass es viele Knoten gibt, die alle aus derselben "wall.png" -Datei geladen werden, ist es effizienter, das Bild einmal zu laden und das Objekt dann jedes Mal zu duplizieren oder einfach das Bild jedes Mal laden?SpriteKit Viele Knoten aus demselben Bild: Getrennt laden oder duplizieren?

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 diesem Bereich ist eine Klasse, die Höhe hält, die SKNode erstreckt, so dass ich Wand self Hinzufügen und dann fügen hinzu, dass SKNode die Szene.

+0

Probieren Sie es in beide Richtungen aus und zählen Sie, wie viele Sie hinzufügen können, bevor Sie eine niedrige Speicherwarnung von iOS erhalten. – vacawama

+0

Ich dachte mehr darüber nach, wie schnell sie geladen werden können. Ich nehme an, dass beide eine ähnliche Speicherbelegung hätten, wenn sie einmal geladen wären. – jaxuru

+0

Ich denke, ist mehr oder weniger das gleiche, die Komplexität des Codes ist 2^n durch zwei für den Zyklus, die Zeile selbst. AddChild (wall.copy()) oder lassen Sie Wand = SKSpriteNode (imageNamed: "Wand") vielleicht fügt nicht mehr Zeit hinzu. Sie können versuchen, Delta-Zeit am Anfang und Ende von Zyklus und Check hinzuzufügen. –

Antwort

1

Um Ihre Frage zu beantworten, ohne Unterstützung zu 3rd-Party zurückgreifen

Gehen Sie mit der 2. Option (die Kopieroption)

Dies verwendet die gleiche Textur über mehrere Sprites, wobei die erste Wahl eine neue Textur bei jeder Iteration erzeugt.

+0

Danke! Wenn ich eine Textur gemacht und diese Textur im Initialisierer einer Reihe von SKSpriteNodes verwendet hätte, würde die Textur referenziert oder kopiert werden? – jaxuru

+0

Referenziert, wenn Sie Texturatlanten verwendet haben. Es wird auch überall referenziert – Knight0fDragon

0

Der Ansatz zur Entwicklung Ihres Projekts erinnert mich an eine TileMap. Passen Sie auf, denn Sie können viel Zeit gewinnen, um alle Elemente zu laden, Sie können Ihre Levels vorbereiten und Sie haben mehr Spaß.

Es gibt tausend Tutorials, die Ihnen beim Erstellen einer TileMap mit Sprite-Kit und Swift helfen können. Viele von ihnen nutzen diese auch genannt GitHub Bibliothek JSTileMaphere

In diesen Anleitungen, um Sie lernen, wie man:

  • mit Ziegeln decken eine Karte erstellen
  • die Karte hinzufügen, um das Spiel
  • Scrollen Sie durch die Karte, um dem Player zu folgen

  • Verwenden Sie Objektlayer.

Es ist sehr einfach, zum Beispiel Sie eine tmx Karte laden können:

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