Как работает collisionBitMask? Swift / SpriteKit
Насколько мне известно, по умолчанию для физических тел отскакивают друг от друга, когда они ударяются друг о друга, пока вы не установите их collisionBitMask равным числу.
Тем не менее, у меня есть огромная проблема, связанная с выполнением того, что, кажется, должно быть очень простым из-за коллизий, я верю, битмасками.
let RedBallCategory : UInt32 = 0x1 << 1
let GreenBallCategory: UInt32 = 0x1 << 2
let RedBarCategory : UInt32 = 0x1 << 3
let GreenBarCategory : UInt32 = 0x1 << 4
let WallCategory : UInt32 = 0x1 << 5
greenBall.physicsBody?.categoryBitMask = GreenBallCategory
greenBall.physicsBody?.contactTestBitMask = RedBarCategory
greenBall.physicsBody?.collisionBitMask = GreenHealthCategory
redBall.physicsBody?.categoryBitMask = RedBallCategory
redBall.physicsBody?.contactTestBitMask = GreenBarCategory
redBall.physicsBody?.collisionBitMask = RedHealthCategory
let borderBody = SKPhysicsBody(edgeLoopFromRect: self.frame)
self.physicsBody = borderBody
self.physicsBody?.friction = 0
borderBody.contactTestBitMask = RedBallCategory | GreenBallCategory
borderBody.categoryBitMask = WallCategory
Итак, здесь у меня есть 2 моих шара и мое граничное тело. Я могу получить обнаружение столкновений, которое мне нужно, но когда я добавляю битовую маску категории тела границы, это позволяет шарам как проходить, так и выходить из экрана, чего я не хочу.
Я также хочу, чтобы шары отскакивали друг от друга, но только когда я закомментирую одну из битовых масок категории, они отскакивают. В противном случае они проходят друг через друга.
Это абсолютно бессмысленно для меня, потому что каждый из этих предметов имеет свою собственную коллизионную маску. У меня также было иногда, когда установка всех чисел, равных 5, позволяла бы всему проходить друг через друга, но затем установка всего 6, чтобы все сталкивались друг с другом.
Как именно работают битовые маски коллизий и существует ли правильный способ управления множеством перекрестных правил коллизий?