2016-07-29 4 views
2

Ich schreibe einen Klon des alten Space Invaders Spiels. Die Eindringlinge werden während update() bewegt und Bomben zufällig fallen lassen; Das Spielerschiff bewegt sich, wenn der Bildschirm berührt wird. Wenn eine Invasorenbombe den Spieler trifft, möchte ich alles außer der Schiffsterbenanimation stoppen. Sobald dies abgeschlossen ist, möchte ich alles neu beginnen.Pause alles außer Animation eines Knotens?

Was ist der beste Weg, dies zu erreichen? Ich überlegte, über alle Knoten aufzuzählen, setze die Eigenschaft paused auf true; Hinzufügen eines Checks in update(), um zu sehen, ob die Todesanimation auf dem Player ausgeführt wurde, und Bewegung überspringen, wenn dies der Fall war, und Ignorieren von Benutzereingaben, wenn die Animation ausgeführt wurde.

Ein anderer Ansatz wäre gewesen, einen Weltknoten zu haben, von dem alles ein Kind ist. Ich könnte dann den Weltknoten pausieren und eine Kopie des Schiffs des Spielers zu der Szene hinzufügen, die die Animation ausführt, so dass es so aussieht, als ob alles außer der Schiffs-Todesanimation gestoppt ist.

Beide scheinen eine Menge Arbeit für den Effekt, den ich will. Irgendwelche Vorschläge?

+0

Sie können von nur einem ähnlichen Space Invaders Spiel in meinem Repo aussehen: [link] (https://github.com/n0an/SwiftBook.SpaceGame) Es diese Funktion mit Pause Bildschirm außer Animation realisiert wird. –

+0

@AntonNovoselov - Danke. Du bist also den Weg gegangen, alles zu einem Kind eines passierbaren Knotens zu machen, damit du das Sternenfeld, Feinde usw. unabhängig anhalten kannst? –

Antwort

2

könnten Sie machen zwei unsichtbaren, rootNode wo Sie Ihre Feinde, Ihre Objekte und alle Spiel enviroments (Etiketten, Münzen ..) sind Childs:

self.rootNode.addChild(enemy1) 

und andere rootShipNode, wo Sie Ihre Spieler hinzugefügt haben. Mit diesem Ansatz können Sie alle anhalten, wenn Sie sich selbst pausieren, oder die unsichtbaren Knoten pausieren, wann immer Sie wollen.

können Sie diesen Prozess übernehmen auch eine pauseNode (SKNode) in die Szene hinzuzufügen:

var pauseNode: SKNode! // a node with resume, go to menu, buttons 
self.addChild(pauseNode) 

Wenn Sie Ihre Pause-Taste drücken, können Sie öffnen Ihre pauseNode und Start:

self.rootNode.paused = true 
self.rootPlayerNode.paused = true 

aber alle Animationen und Objekte, die zu sich selbst hinzugefügt wurden, pauseNode Elemente und Animationen enthalten, laufen.