0

我想将单元格位置转换为场景的坐标。目前,该单元格是一个不可见节点的子节点。当细胞与病毒接触时,我得到细胞的位置。令人困惑的是,单元格相对于其父级的坐标以及坐标转换到场景时的位置是相同的。位置读数为 (0,0.002),但其实际位置应为 (0,50)。

如果我通过直接引用单元节点(例如childNodeWithName("cell"))来监视位置,它会显示正确的位置。我最初认为这个问题与向下投射有关,但不管有没有它,位置都显示不正确。为什么会这样?

func didBeginContact(contact: SKPhysicsContact) {
    let bodyA = contact.bodyA
    let bodyB = contact.bodyB

    if bodyA.categoryBitMask & PhysicsCategory.Virus != 0
        && bodyB.categoryBitMask & PhysicsCategory.Cell != 0 {

        let virus = bodyA.node as! VirusNode
        virus.attachedCell = bodyB.node as? CellNode
        print(self.convertPoint(virus.attachedCell!.position, toNode: self)) //outputs (0,0.002)
    }
}
4

1 回答 1

0

您在要转换为 (self) 的同一对象 (self) 上使用 convertPoint 方法,因此您将始终获得相同的点!

这个片段有很多问题。例如,简单的设置病毒的attachedCell属性不会使病毒成为病毒的子节点。

如果你想这样做,你必须明确地这样做。否则,该单元仍然是它之前的任何节点的子节点......

你要这个:

func didBeginContact(contact: SKPhysicsContact) {
    let bodyA = contact.bodyA
    let bodyB = contact.bodyB

    if bodyA.categoryBitMask & PhysicsCategory.Virus != 0
        && bodyB.categoryBitMask & PhysicsCategory.Cell != 0 {
        bodyB.node.removeFromParent()
        let virus = bodyA.node as! VirusNode
        virus.attachedCell = bodyB.node as? CellNode
        virus.addChild(bodyB.node)
        print(virus.convertPoint(virus.attachedCell!.position, toNode: self)) //should output properly
    }
}

这会将细胞的位置从病毒的坐标系转换为场景的坐标系。

于 2016-05-06T16:44:12.770 回答