Swift 使用convert(:to:)或convert(:from:)转换节点';s位置到另一个';s

Swift 使用convert(:to:)或convert(:from:)转换节点';s位置到另一个';s,swift,sprite-kit,Swift,Sprite Kit,我试图做出一个动作,这样我的玩家就会慢慢地被拉向一个要杀死他的敌人。实际上,问题在于玩家和敌人处于不同的节点,遵循以下层次结构: 场景(SKScene)-父节点->播放器(SKNode) 场景(SKScene)-父节点->敌人节点(SKNode)-父节点->敌人节点(SKNode) 所以我要做的是把敌人的位置转换成场景的坐标系,然后把这个位置转换成玩家的坐标系 let enemyToScene = enemy.node?.convert(other.enemy!.position, to: se

我试图做出一个动作,这样我的玩家就会慢慢地被拉向一个要杀死他的敌人。实际上,问题在于玩家和敌人处于不同的节点,遵循以下层次结构:

场景(SKScene)-父节点->播放器(SKNode)

场景(SKScene)-父节点->敌人节点(SKNode)-父节点->敌人节点(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.970458984375339.2470703125)

以及转换后敌人的位置:

烯粘菌苯:可选(-2880.0,-192.0))

场景播放器:(-2038.263427734375,-27.4952392578125)


如果有人能帮助我,我将非常高兴。

节点的
位置
位于其父节点的几何体中,因此您需要将
敌方.position
敌方.parent
的几何体转换为
玩家.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)
}

事实上,问题在于我实例化我的播放器的方式,但是谢谢!