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 № 1Nadpisujesz 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)