В своей игре я использую SKSprite. Некоторые столкновения не обнаружены. Я сделал 10 попыток, коллизии работают хорошо, но около 25% столкновений, которые должны быть обнаружены, не обнаруживаются. Я понятия не имею, почему, я пробовал много вещей. Коллизии бывают только с узлами одной категории.
Я понятия не имею, почему случайно некоторые столкновения не происходят, когда я их явно вижу, у вас есть идеи? Спасибо за вашу помощь.
Вот код didBeginContact:
func didBeginContact(contact: SKPhysicsContact) {
var firstBody: SKPhysicsBody = contact.bodyA
var secondBody: SKPhysicsBody = contact.bodyB
if firstBody.categoryBitMask == secondBody.categoryBitMask {
listContacts.append([firstBody.node!,secondBody.node!])
}
}
}
Вот код didEndContact:
func didEndContact(contact: SKPhysicsContact) {
var firstBody: SKPhysicsBody = contact.bodyA
var secondBody: SKPhysicsBody = contact.bodyB
if contact.bodyA.categoryBitMask == contact.bodyB.categoryBitMask {
for i in listContacts{
if (i.contains(firstBody.node!) && i.contains(secondBody.node!)){
let findIndex = listContacts.indexOf { $0 == i }
listContacts.removeFirst(findIndex!)
}
}
}
Наконец, когда я объявляю новый SKSpriteNode, я устанавливаю это:
rectangle.physicsBody = SKPhysicsBody(rectangleOfSize: rectangle.size)
rectangle.physicsBody?.dynamic = true
rectangle.physicsBody?.collisionBitMask = PhysicsCategory.None
usePreciseCollisionDetection = true ничего не меняет, поэтому я не использую usePrecisionCollisionDetection
Каждый SKSpriteNode имеет свои categoryBitmask и contactTestBitmask равные, потому что должны сталкиваться только одни и те же SKSpriteNodes.
Также:
physicsWorld.gravity = CGVectorMake(0, 0)
physicsWorld.contactDelegate = self
Наконец, вот короткое видео моей игры, если вы хотите легко понять, что происходит (проблема столкновений между прямоугольниками) https://www.youtube.com/watch?v=-pbmKwQiE9U