2016-08-07 42 views
0

ich mein erstes Spiel in Swift machen und ich versuche, eine SKSpriteNode Unterklasse-Instanz (trailingSprite) zu erhalten folgen oder „Weg“ eine andere SKSpriteNode Unterklasse (User) dass der Benutzer steuert. Ich war in der Lage, dies zu erreichen, indem ich eine move(aUser:User) Methode innerhalb der trailingSprite Klasse, die einen Geschwindigkeitsvektor auf den schleppenden Körper, das heißt die Differenz der beiden postions Ich rufe diese Methode innerhalb von GameScenes Update Funktion. Jedoch ist diese trailingSprite nicht immer auf dem Bildschirm und kann zu zufälligen Zeiten in unterschiedlichen Mengen spawnen. Gibt es eine effektivere Möglichkeit, "live" oder aktualisierte Positionen der User Instanz innerhalb jeder trailingSprite Instanz abzurufen, anstatt eine Verschiebungsmethode für jede innerhalb von Update aufrufen zu müssen (was letztlich nicht funktioniert)? Ich versuchte auch, die User Instanz als Referenz zu übergeben, aber dies funktionierte immer noch nicht, da der Geschwindigkeitsvektor nie von den ursprünglichen Positionen aktualisiert wurde. Jede Hilfe wäre großartig!Verwalten GameScenes Update-Methode und Referenzierung Ändern Instanzeigenschaften innerhalb anderen Klassen

Antwort

1

Innerhalb der update Methode sollten Sie in der Lage sein, eine Bewegung Methode auf jedem trailingSprite in Ihrer Szene aufzurufen, indem Sie alle Knoten mit dem entsprechenden Namen finden.

self.enumerateChildNodes(withName: "trailingSprite", using: { node, _ in 
    if let trailingSprite = node as? TrailingSprite { 
     trailingSprite.move(aUser: user) 
    } 
}) 

Dies würde erfordern, dass Sie die name Eigentum auf Ihrer TrailingSprite Klasse gesetzt:

self.name = "trailingSprite" 
+0

Vielen Dank, aber macht es Sinn, (aus Effizienzgesichtspunkten), obwohl diese Methode zu halten Aufruf? Ab jetzt werden die nachfolgenden Sprites erst gegen Ende des Spiels Teil der Szene, wenn überhaupt (sie sind eine Art Boss-Level). Ich habe also das Gefühl, dass die Methode nur so oft aufgerufen werden sollte, wenn sie definitiv vor Ort ist - ich denke, du könntest eine if-Anweisung verwenden, aber ich glaube, es sollte einen Weg geben, dies in der Klasse selbst zu verbergen Ich weiß es nicht. – Sam

+0

Es hängt alles von Ihrer genauen Spiellogik ab, aber Sie könnten eine boolesche Variable in Ihrer Szene haben, die anzeigt, ob die nachlaufenden Knoten aktiv sind, und nur Ihre Knoten auflisten, wenn dies der Fall ist. Xcode hat viele großartige [Leistungswerkzeuge] (https://developer.apple.com/library/ios/documentation/ToolsLanguages/Conceptual/Xcode_Overview/MeasuringPerformance.html) (speziell für SpriteKit), also checken Sie diese, wenn die Leistung zu einem wird Problem. – nathan