Беда с битовыми масками в SpriteKit SWIFT
В моей игре есть круги, которые имеют разные цвета. Они должны сталкиваться только с границами, которые не имеют своего цвета. Для этого я сначала назначаю нормальному кругу битовую маску категории.
struct CollisionCategoryBitmask {
static let monster: UInt32 = 00000001
static let picker: UInt32 = 00000010
static let bound: UInt32 = 00000100
static let circle: UInt32 = 00001000
static let yellow: UInt32 = 00010000
static let brown: UInt32 = 00100000
static let cyan: UInt32 = 01000000
static let magenta: UInt32 = 10000000
}
physicsBody?.categoryBitMask = CollisionCategoryBitmask.circle
Границы имеют следующие маски:
boundary.physicsBody?.categoryBitMask = CollisionCategoryBitmask.bound
boundary.physicsBody?.collisionBitMask = 11101111
После того, как круг сталкивается со сборщиком, он получает немного маски, которая должна заставить его перестать сталкиваться с границей, но это не так.
self.circles[i].fillColor = .yellow
self.circles[i].physicsBody?.categoryBitMask = 00010000
self.circles[i].physicsBody?.collisionBitMask = 11111011
Этот код выполняется, когда круг сталкивается со сборщиком. Значения в структуре, такие как голубой и пурпурный, соответствуют каждому состоянию круга, в котором оно не сталкивается с границей этого цвета. Где моя ошибка?
1 ответ
Просто добавьте "0b" в начале каждого литерала. Вы не используете двоичную запись прямо сейчас.
Узнайте больше о том, как работают битовые маски.