为什么我们不能只在B 或 C与A碰撞时才调用didBegin函数,但如果B和C碰撞在一起则不会?这是可能的,还是我们总是需要检查是否有东西与A碰撞?
A.physicsBody!.collisionBitMask = 0
A.physicsBody!.contactTestBitMask = 1
A.physicsBody!.categoryBitMask = 1
B.physicsBody!.collisionBitMask = 0
B.physicsBody!.contactTestBitMask = 1
B.physicsBody!.categoryBitMask = 2
C.physicsBody!.collisionBitMask = 0
C.physicsBody!.contactTestBitMask = 1
C.physicsBody!.categoryBitMask = 3
Api对contactTestBitMask说:一个掩码,用于定义哪些类别的物体会导致与此物理体的交叉通知。
我们需要像A.contactTestBitMask = 1& 2
答案 0 :(得分:2)
因为说categoryBitMask 3与categoryBitMask 1 AND categortyBitMask 2相同。请参阅单词bitmask
。这是他们的理由。这意味着您可以设置32个标志(或者您可以设置所提供的Int中的每个位,但是您想要查看它)。
位掩码的有效唯一数字是2的幂,
1
2
4
8等
可以表示为
1<< 1
1<< 2
1<< 3
1<< 4
或
0B1
0b10
0b100时
0b1000
但是你喜欢写它,值必须是2的幂。
因此将C更改为位掩码值4以使其独立(或使其值为2,因为B和C共享相同的碰撞属性,与A冲突)