2016-03-23 9 views
0

Ich mache ein SpriteKit Spiel und ich versuche einen SKCameraNode zu bekommen, um dem Spielerknoten zu folgen. Wenn ich jedoch auf die position -Eigenschaft des Spielerknotens zugreife, nachdem ich eine SKAction verwendet habe, um sie zu verschieben, entspricht die Position nach dem Ausführen der Aktion der Position vor dem Ausführen. Hier ist meine Szene Code:SKAction Waiting for Completion

func updateMap(playerX: Int, playerY: Int) { 
    player.coordinates = CGPoint(x: highlightedTile.tileX, y: highlightedTile.tileY) 
    camera?.position = player.position 
} 

und der Code aus meiner player Klasse:

var coordinates: CGPoint { 
    didSet{ 
     let moveAction = SKAction.moveTo(CGPoint(x: (coordinates.x) * 64 - 64, y: (coordinates.y) * 56 - 47), duration: NSTimeInterval(2.0)) 
     self.runAction(moveAction) 
    } 
} 

SpriteKit nicht aktualisiert die position Eigenschaft des Spielers Knoten, bis die Aktion abgeschlossen ist. Daher möchte ich warten, bis die Animation abgeschlossen ist, bevor die Kameraposition aktualisiert wird. Wie kann das gemacht werden?

Antwort

0

Sie die Abfrage der position Eigenschaft, bevor die Bewegungs abgeschlossen ist ...

Try this:

print(playerNode.position) 

let moveAction = SKAction.moveTo(CGPoint(x: (coordinates.x) * 64 - 64, y: (coordinates.y) * 56 - 47), duration: NSTimeInterval(2.0)) 
let waitAction = SKAction.waitForDuration(NSTimeInterval(3)) 

self.runAction(moveAction, completion: { 
    print(playerNode.position) 
}) 

Beachten Sie auch, dass ich playerNode Variable, die den Spieler darstellen sollte. Nicht sicher, was in Ihrem Fall ist (der Spieler oder die Szene).

+0

Entschuldigung für mangelnde Klarheit in meiner Frage. Dieser Code gehört zu meiner 'player' Klasse. 'Player' hat eine Eigenschaft,' coordinates', die die Position des Spielers auf einer Karte darstellt. Dieser Code wird ausgelöst, wenn die Eigenschaft 'coordinates' geändert wird. Ich möchte Code in meiner Szenen-Klasse ausführen, nicht die Spieler-Klasse, sobald der Spieler sich bewegt hat. Wie kann das gemacht werden? –

+0

@ATyshka Was ist das Problem mit dem, was ich gepostet habe? Gibt es den Start- und den Endort des Players aus? – Whirlwind

+0

Ich entschuldige mich für die Verwirrung bei der Feststellung meines Problems. Ich habe meine Frage aktualisiert. –