Функция my didBeginContact обнаруживает около 60 столкновений между двумя SKSpriteNodes, когда их должно быть только одно.Почему моя функция didBeginContact обнаруживает слишком много конфликтов?
func didBeginContact(contact: SKPhysicsContact) {
let firstBody = contact.bodyA
let secondBody = contact.bodyB
if firstBody.categoryBitMask == bulletCategory && secondBody.categoryBitMask == dragonCategory || firstBody.categoryBitMask == dragonCategory && secondBody.categoryBitMask == bulletCategory{
print("collision happened")
}
}
Когда узлы входят в контакт, консоль печатает «столкновение» много раз.
Вот как я объявляю физика для каждого комбинезоны SKSpriteNode
dragonNode.physicsBody = SKPhysicsBody(texture: dragonNode.texture!, size: CGSizeMake(dragonNode.size.width, dragonNode.size.height))
dragonNode.physicsBody?.affectedByGravity = false
dragonNode.physicsBody?.dynamic = true
dragonNode.physicsBody?.categoryBitMask = dragonCategory
dragonNode.physicsBody?.collisionBitMask = bulletCategory
dragonNode.physicsBody?.contactTestBitMask = bulletCategory
bulletNode.physicsBody = SKPhysicsBody(texture: texture, size: texture.size())
bulletNode.physicsBody?.affectedByGravity = false
bulletNode.physicsBody?.dynamic = true
bulletNode.physicsBody?.categoryBitMask = bulletCategory
bulletNode.physicsBody?.collisionBitMask = dragonCategory
bulletNode.physicsBody?.contactTestBitMask = dragonCategory
Это одна из последних вещей, которые мне нужно исправить для моей игры будет завершена, так что если кто-то может помочь, что было бы здорово!
мне нужно установить dragonNode.collided на false, чтобы это можно было сбросить? –
Там я добавил пример кода того, что вы можете сделать. Очевидно, вам придется создать свойство на dragonNode, которое вы можете написать (например, «collided») или найти другую переменную для записи для проверки. Вам также нужно будет найти способ сброса переменной, чтобы обнаружение могло быть обнаружено позже. –
okay спасибо, что было действительно ясно –