/ / collisionBitMask wartości nie działają w SpriteKit - swift, sprite-kit, skphysicsbody

wartości collisionBitMask nie działają w SpriteKit - swift, sprite-kit, skphysicsbody

Mam dwa byty, które chcę ze sobą zderzyć. Mam strukturę do śledzenia różnych kategorii fizyki:

struct PhysicsCategory {
static let Player: Int32 = 0x1 << 1
static let Obstacle: Int32 = 0x1 << 2
static let Ground: Int32 = 0x1 << 3
}

Chcę, aby mój węzeł odtwarzacza kolidował z moimi węzłami przeszkód. Oto fizyka mojego węzła Player:

    self.physicsBody = SKPhysicsBody(rectangleOf: (self.size))
self.physicsBody?.isDynamic = true
self.physicsBody?.categoryBitMask = UInt32(PhysicsCategory.Player)
self.physicsBody?.collisionBitMask = UInt32(PhysicsCategory.Obstacle)
self.physicsBody?.collisionBitMask = UInt32(PhysicsCategory.Ground)

Oto fizyka mojego węzła Przeszkody

    self.physicsBody = SKPhysicsBody(rectangleOf: self.size)
self.physicsBody?.categoryBitMask = UInt32(PhysicsCategory.Obstacle)
self.physicsBody?.collisionBitMask = UInt32(PhysicsCategory.Player)
self.physicsBody?.collisionBitMask = UInt32(PhysicsCategory.Ground)
self.physicsBody?.isDynamic = true
self.physicsBody?.velocity = CGVector(dx: -240, dy: 0)
self.physicsBody?.linearDamping = 0
self.physicsBody?.friction = 0

Kiedy przecinają ścieżki, po prostu przechodzą przez siebie. Jednak oba prawidłowo zderzają się z Ziemią. Co ja robię źle?

Odpowiedzi:

2 dla odpowiedzi № 1

Nadpisujesz collisionBitMask po skonfigurowaniu go po raz drugi. Powinieneś skonfigurować OR maska ​​bitowa z symbolem |.

Zastąpić

self.physicsBody?.collisionBitMask = UInt32(PhysicsCategory.Obstacle)
self.physicsBody?.collisionBitMask = UInt32(PhysicsCategory.Ground)

z:

self.physicsBody?.collisionBitMask = UInt32(PhysicsCategory.Obstacle) | UInt32(PhysicsCategory.Ground)

i

self.physicsBody?.collisionBitMask = UInt32(PhysicsCategory.Player)
self.physicsBody?.collisionBitMask = UInt32(PhysicsCategory.Ground)

z:

self.physicsBody?.collisionBitMask = UInt32(PhysicsCategory.Player) | UInt32(PhysicsCategory.Ground)