2016-03-23 2 views
0

Я делаю игру SpriteKit, и я пытаюсь получить SKCameraNode, чтобы следить за игровым узлом. Однако, когда я получаю доступ к свойству позиции узла игрока после использования SKAction для его перемещения, позиция после запуска действия такая же, как и позиция перед ее запуском. Вот мой код сцены:SKAction Ожидание завершения

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

и код из моего player класса:

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 не обновляет position свойства узла игрока, пока действие не будет завершено. Поэтому я хочу подождать, пока анимация не завершится до обновления положения камеры. Как это может быть сделано?

ответ

0

Вы запрашивая position свойства перед двигающийся завершен ...

Попробуйте это:

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) 
}) 

Также обратите внимание, что я использую playerNode переменные, которая должна представлять игрок. Не уверен, что self в вашем случае (игрок или сцена).

+0

Извините за недостаток ясности в моем вопросе. Этот код является частью моего класса 'player'. «Игрок» имеет свойство «координаты», которое представляет позицию игрока на карте. Этот код запускается, когда изменяется свойство 'координат'. То, что я хочу сделать, это запустить код в классе сцены, а не в классе игрока, как только игрок переместится. Как это может быть сделано? –

+0

@ATyshka В чем проблема с тем, что я опубликовал? Печатает ли начало и конец местоположения плеера? – Whirlwind

+0

Приносим извинения за недоразумение, заявляя о моей проблеме. Я обновил свой вопрос. –

Смежные вопросы