如果您使用整数 (UInt32) 定义类别:
static const uint32_t playerCategory = 1;
static const uint32_t enemyCategory = 2;
您必须记住序列 1、2、4、8、16、32、64 等,一直到 2,147,483,648。
如果您使用位移:
static const uint32_t playerCategory = (0x01 << 1); // 0010
static const uint32_t enemyCategory = (0x01 << 2); // 0010
(应该以 0 班次开始),然后你可以增加班次:
static const uint32_t playerCategory = (1 << 0);
static const uint32_t enemyCategory = (1 << 1);
static const uint32_t enemy2Category = (1 << 2);
static const uint32_t enemy3Category = (1 << 3);
static const uint32_t asteroidCategory = (1 << 4);
static const uint32_t spaceshipCategory = (1 << 5);
static const uint32_t blackHoleCategory = (1 << 6);
static const uint32_t deathStarCategory = (1 << 7);
.
.
.
static const uint32_t lastCategory = (1 << 31);
您可能会觉得不那么令人困惑。
但最终结果是相同的 - 无论它们是如何定义的,只要它们是 UInt32,您都可以对它们使用位操作,并且在您的代码中,您通常永远不会再次引用整数值。