Итак, я создаю игру, и я просто хочу обнаружить столкновение между узлом игрока и пулей, выпущенной врагом. Поэтому я установил правильные параметры, а также CategoryBitMask и contactTestBitMask для каждого игрока и пуль.
Реализуя функции didBegin и didEnd, я хочу выполнить некоторый код, когда столкновение начинается и заканчивается. Проблема в том, что когда я строю и запускаю проект, физическая подсистема перемещает пулю вокруг игрока, а не через игрока. Это связано с тем, что свойство isDynamic слишком велико для игрока, маркера или для обоих. Очевидно, что первое, что нужно попробовать, это установить для свойства isDynamic значение false; однако, когда я делаю это, обратный вызов отсутствует, когда происходит столкновение, и функция didBegin / didEnd не выполняется.
У кого-нибудь есть идеи как это исправить?
Код для настройки тела игрока и пули; а также функция didBegin ниже для вашей справки
playerNode!.physicsBody = SKPhysicsBody(rectangleOf: CGSize(width: playerNode!.size.width/2, height: playerNode!.size.height/2)) //sets the physics body for the player
playerNode!.physicsBody!.isDynamic = false //we dont want the physics to be simulated by the subsystem
playerNode!.physicsBody!.affectedByGravity = false
playerNode!.physicsBody!.pinned = false
playerNode!.physicsBody!.allowsRotation = false
playerNode!.physicsBody!.categoryBitMask = PhysicsCategory.Player
playerNode!.physicsBody!.contactTestBitMask = PhysicsCategory.Bullet
self.bullet?.physicsBody = SKPhysicsBody(circleOfRadius: bullet!.size.width * 0.5)
self.bullet?.physicsBody?.isDynamic = true
self.bullet?.physicsBody?.pinned = false
self.bullet?.physicsBody?.allowsRotation = false
self.bullet?.physicsBody?.affectedByGravity = false
self.bullet?.physicsBody?.categoryBitMask = PhysicsCategory.Bullet
self.bullet?.physicsBody?.contactTestBitMask = PhysicsCategory.Player
func didBegin(_ contact: SKPhysicsContact) {
let collision = contact.bodyA.categoryBitMask | contact.bodyB.categoryBitMask
if collision == PhysicsCategory.Player | PhysicsCategory.Bullet {
print("There was a collision with the player and a bullet")
}
}
//Defines the physics category for the game
struct PhysicsCategory {
static let None: UInt32 = 0
static let Player: UInt32 = 0b1
static let Bullet: UInt32 = 0b10
}