Вы не можете сделать это таким образом.
С https://developer.apple.com/documentation/spritekit/skaction?changes=_1
Наблюдение за изменениями свойств узла
Обычно действия не вызывают публичные методы на узлах. Например, если вы хотите, чтобы подкласс SKNode отвечал на действие перемещения (to: duration :), вы можете рассмотреть возможность переопределения его свойства position для добавления наблюдателя didSet (см. Переопределение наблюдателей свойства).
class MovingNode: SKSpriteNode {
override var position: CGPoint {
didSet {
// code to react to position change
}
}
}
Однако, поскольку действие перемещения, выполняемое на экземпляре MovingNode, не устанавливает свою позицию, наблюдатель не вызывается, и ваш код, реагирующий на изменение позиции, никогда не выполняется.
В этом примере решением является использование SKSceneDelegate. Сравнивая позицию узла в обновлении делегата (метод _: for :) - который вызывается в начале каждого кадра - с его позицией в методе делегата didEvaluateActions (for :) - который вызывается после оценки любых действий - Вы можете проверить, переместился ли он, и соответственно отреагировать.
В листинге 7 показан пример того, как вы можете реализовать это решение.
Листинг 7
Реакция на изменение положения во время бегового действия
let node = SKNode()
var nodePosition = CGPoint()
func update(_ currentTime: TimeInterval, for scene: SKScene) {
nodePosition = node.position
}
func didEvaluateActions(for scene: SKScene) {
let distance = hypot(node.position.x - nodePosition.x,
node.position.y - nodePosition.y)
if distance > 0 {
// code to react to position change
}
}