您可以使用UInt32来定义超过32个对象。
一种方法是保留最后一位或几位。这会减少您用于项目的位数,但是您可以通过使用的位数乘以该数字来增加它们的数量。因此,如果我们只在31个以上的项目上使用32位掩码,我们可以拥有2 * 31个对象。如果我们为更多项保留第32位和第31位,则可以拥有4 * 30个对象,依此类推。
即:从SKScene中获取的普通32位。
(void)didBeginContact:(SKPhysicsContact *)contact
{
uint32_t catagoryContactBitMask = (contact.bodyA.categoryBitMask | contact.bodyB.categoryBitMask);
if (catagoryContactBitMask == (carCategory | wallCategory))
{ ....
}
}
例如,如果我们需要更多的类别高于32...
因此,让我们将第32位保留为超过31个项目的“二级”位...这将给我们2 * 31或62个项目。
静态常量uint32_t 32bitMask = 0x1 << 32; //10000000000000000000000000000000
静态常量uint32_t wallCategory = 0x1 << 0; // 00000000000000000000000000000001
静态常量uint32_t porcheCategory = 0x1 << 1; // 00000000000000000000000000000010
静态常量uint32_t lamboCategory = 0x1 << 1 | 32bitMask; //10000000000000000000000000000010
碰撞检测应该是相同的
再次从SKScene开始
(void)didBeginContact:(SKPhysicsContact *)contact
{
uint32_t catagoryContactBitMask = (contact.bodyA.categoryBitMask | contact.bodyB.categoryBitMask);
if ( catagoryContactBitMask == (wallCategory|porcheCategory))
{ ....
}
else if ( catagoryContactBitMask == (wallCategory|lamboCategory))
{ ....
}
}