2016-05-06 14 views
0

Я хочу преобразовать позицию ячейки в координаты сцены. В настоящее время клетка является дочерним элементом невидимого узла. Когда ячейка вступает в контакт с вирусом, я получаю позицию ячейки. Смутно, позиция ячейки одинакова в своих координатах относительно ее родителя, а также когда координаты преобразуются в сцену. Положение читается (0,0.002), но его фактическое положение должно быть (0,50).SpriteKit - Преобразование координат точки в сцену дает неправильное значение

Если я контролирую позицию, ссылаясь непосредственно на узел ячейки (например, 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) 
    } 
} 
+0

Можете ли вы показать нам код для конвертации, пожалуйста? – ThrowingSpoon

+0

convertPoint - метод SpriteKit. Я отредактирую его в self.convertPoint(), чтобы уточнить – kag359six

+0

Да, у меня было ощущение, что это может быть на самом деле. Сейчас я в Windows. Я посмотрю, смогу ли я поехать позже. – ThrowingSpoon

ответ

0

Вы используете метод 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 
    } 
} 

который преобразует позицию ячейки от системы координат вируса в систему координат сцены ,

+0

Я не собираюсь делать bodyB ребенком вируса. Единственная проблема, с которой я столкнулся, - это точечное преобразование, которое вы мне показали. Спасибо. Быстрый вопрос, почему имеет значение, на какой узел вызывается метод convertPoint, если он преобразует заданную позицию в координаты данного узла? – kag359six

+0

Nevermind Я получил его, еще раз спасибо – kag359six

Смежные вопросы