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
0
A
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"
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
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