Вы можете иметь более 32 объектов, определенных с помощью UInt32.
Один из способов сделать это — зарезервировать последние биты. Это уменьшит количество битов, которые у вас есть для элементов, но вы умножите это на количество битов, которые вы используете. Таким образом, если мы используем только 32-битную маску для элементов выше 31, у нас может быть 2*31 количество объектов. Если мы зарезервируем 32-й и 31-й бит для большего количества элементов, у нас может быть 4 * 30 объектов и так далее.
т.е. обычный 32 бит от SKScene
(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; // 000000000000000000000000000000010
статическая константа uint32_t lamboCategory = 0x1 ‹‹ 1 | 32-битная маска; //100000000000000000000000000000010
обнаружение столкновений должно быть таким же
снова из SKScene
(void)didBeginContact:(SKPhysicsContact *)contact
{
uint32_t catagoryContactBitMask = (contact.bodyA.categoryBitMask | contact.bodyB.categoryBitMask);
if ( catagoryContactBitMask == (wallCategory|porcheCategory))
{ ....
}
else if ( catagoryContactBitMask == (wallCategory|lamboCategory))
{ ....
}
}
person
ScottS
schedule
05.01.2020