Game Engine Collison Bitmask… Warum 0x01 usw.?

Dieser Situation sowohl in Sprite Kit (iOS-Entwicklung) als auch in Cocos2d-x (von dem ich weiß, dass es die Inspiration für Sprite Kit war, weshalb sie viele der gleichen Tools verwenden) zu begegnen, entschied ich mich schließlich, warum das passiert

Wenn ich eine Physik-Engine verwende, erstelle ich ein Sprite und füge einen physicsBody hinzu. Zum größten Teil verstehe ich, wie die Kategorie, die Kollision und die Kontaktbitmasken festgelegt werden und wie sie funktionieren. Das Problem ist die tatsächliche Bitmaskennummer:

SpriteKit:

static const uint32_t missileCategory     =  0x1 << 0;
sprite.physicsBody.categoryBitMask = missileCategory;

Cocos2D-X:

sprite->getPhysicsBody()->setCategoryBitmask(0x01); // 0001

Ich bin total verwirrt, warum ich in beiden Fällen 0x01 oder 0x1 << 0 schreiben würde. Ich verstehe etwas, dass sie Hex verwenden, und es hat etwas mit 32-Bit-Ganzzahlen zu tun. Und soweit ich in der Lage war zu googeln, ist 0x01 0001 in binär, was 1 in dezimal ist. Und 0x02 ist 0010 in binär, was 2 in dezimal ist. Okay, es gibt diese Konvertierungen, aber warum in aller Welt würde ich sie für so etwas Einfaches wie Kategorien verwenden?

Nach meiner Logik sind das, wenn ich eine Spielerkategorie, eine Feindkategorie, eine Raketenkategorie und eine Wandkategorie nenne, nur 4 Kategorien. Warum nicht Zeichenfolgen für die Kategorie verwenden? Oder sogar nur Binärzahlen, die jeder Nicht-CS-Mensch verstehen würde, wie 0,1,2 und 3?

Und schließlich bin ich verwirrt, warum es 32 verschiedene Kategorien gibt? Ich dachte, eine 32-Bit-Ganzzahl hätte Zahlen zwischen 0 und einigen Milliarden (natürlich ohne Vorzeichen). Warum habe ich nicht Milliarden verschiedener möglicher Kategorien?

Ist da irgendeine Optimierung, die ich nicht verstehe? Oder ist dies nur eine alte Konvention, die sie verwenden, aber nicht benötigt wird? Oder gibt es etwas, das jemand mit nur 2 Semestern College-CS-Ausbildung nicht verstehen würde?

Antworten auf die Frage(6)

Ihre Antwort auf die Frage