Используйте команду convert (_: to :) или convert (_: from :), чтобы преобразовать позицию узла в позицию другого. - PullRequest
1 голос
/ 14 июня 2019

Я пытаюсь сделать СКАК, чтобы мой игрок медленно тянулся к врагу, который собирается его убить. Проблема, на самом деле, заключается в том, что игрок и враг находятся в разных узлах, следуя этой иерархии:

Сцена (SKScene) -PARENT-> Игрок (SKNode)

Сцена (SKScene) -PARENT-> EnemiesNode (SKNode) -PARENT-> Враг (SKNode)

Итак, я пытаюсь преобразовать позицию противника в систему координат сцены, а затем преобразовать эту позицию в систему координат игрока.

let enemyToScene = enemy.node?.convert(other.enemy!.position, to: self)
let sceneToPlayer = self.convert(enemyToScene!, to: self.player.position)
self.player.position.run(SKAction.move(to: enemyToPlayer!, duration: 2.0))

Когда этот код выполняется, происходит то, что мой игрок переходит в совершенно другую позицию, но я заметил, что он всегда переходит в одну и ту же позицию, поэтому я думаю, что преобразование работает, но не так, как ожидается.

Это позиции перед конвертацией:

Положение противника: необязательно ((- 1440,0, -96,0))

Позиция игрока: (347.970458984375, 339.2470703125)

И позиция противника после конверсии:

EnemyToScene: необязательно ((- 2880,0, -192,0))

SceneToPlayer: (-2038.263427734375, -27.4952392578125)

Если кто-нибудь сможет мне помочь, я буду очень рад.

1 Ответ

1 голос
/ 14 июня 2019

Узел position находится в родительской геометрии , поэтому вам необходимо преобразовать enemy.position из геометрии enemy.parent в геометрию player.parent.

if
    let enemyNode = enemy.node,
    let enemyParent = enemy.parent,
    case let playerNode = player.position,
    let playerParent = playerNode.parent
{
    let targetPosition = enemyParent.convert(enemyNode.position, to: playerParent)
    playerNode.run(SKAction.move(to: targetPosition, duration: 2)
}
...