if ((catA & maskB) != 0 && (catB & maskA) != 0)
它位于Box2d's manual: 6.2中,用于检查两个对象是否应该发生碰撞(过滤后)
最佳答案
catA是对象A的碰撞类别的位字段
maskA是对象A可能与之碰撞的类别的位字段。
例如:
catA = 100010000010010 // Object A is in 4 collision categories
maskA = 001010000000000 // Object A can collide with too different categories
catB = 000010001000001 // Object B is in 3 collision categories
maskB = 100000000000000 // Object B can only collide with the category represented by the highest bit
catA和maskB表示catA和maskB中的位均为1,因此为
1000000000000000
。它不是0,因为对象B可能与最高位的对象发生冲突,并且对象A设置了该位。catB&maskA表示catB和maskA中的位均为1,因此为
0000100000000000
。它也不为零,因为对象A可以与第5个最高位类别中的对象发生冲突,而对象B属于该类别。因此这两个对象可能会发生碰撞。