У меня есть делегат-контакт, чтобы проверить, когда игрок попадает в барьер. Когда игрок попадает барьер, положение барьера сохраняется на переменную, чтобы использоватьКонтактный узел делегата не дает то же положение
var movement : Movement
var collision : Int = 0
init(_ movement : Movement){
self.movement = movement
}
// Body B is the collision giver
// Body A is the contacted node
func didBegin(_ contact: SKPhysicsContact) {
collision += 1
let categories : (taker: UInt32, giver : UInt32) = (contact.bodyB.categoryBitMask, contact.bodyA.categoryBitMask)
if categories.giver == Category.Player && categories.taker == Category.Barrier {
movement.setBack.isOn = true
movement.setBack.barrierPosition = (contact.bodyB.node?.position)!
}
print("Barrier position x")
print(contact.bodyB.node?.position.x)
print("Collision number")
print(collision)
}
Однако проблема, я заметил, что contact.bodyB.node? .position дает мне другое значение, хотя барьер не двигался. Поскольку позиция различна каждый раз, тогда она отбрасывает все остальные классы. Как я могу удостовериться, что получаю точное значение каждый раз?
EDIT
Добавлено некоторые отладочные сообщения:
print("Barrier position x")
print(contact.bodyB.node?.position.x)
print("Collision number")
print(collision)
И они выдают:
Barrier position x
Optional(156.24853515625)
Collision number
1
Тогда я снова сталкиваются
Barrier position x
Optional(151.248504638672)
Collision number
2
Какие позиции дифференциала вы испытываете? Например, дайте мне пример напечатанной позиции и ожидаемую позицию. – Pierce