Беда с битовыми масками в 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" в начале каждого литерала. Вы не используете двоичную запись прямо сейчас.

Узнайте больше о том, как работают битовые маски.

Другие вопросы по тегам