SpriteKit - преобразование точки в координаты сцены дает неправильное значение

Я хочу преобразовать положение ячейки в координаты сцены. В настоящее время ячейка является дочерним элементом невидимого узла. Когда клетка вступает в контакт с вирусом, я получаю положение клетки. Смущает, что положение ячейки одинаково в ее координатах относительно ее родителя, а также когда координаты преобразуются в сцену. Позиция читает (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)
    }
}

1 ответ

Решение

Вы используете метод convertPoint для того же объекта (себя), который вы конвертируете в (себя), так что вы всегда получите ту же точку!

Есть много проблем с этим фрагментом. Например, простая установка свойства вирус в attachCell не сделает вирус дочерним узлом вируса.

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

Вы хотите это:

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

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

Другие вопросы по тегам