使节点'B'和'C'仅与节点'A'发生冲突

时间:2016-09-20 18:48:26

标签: swift sprite-kit skphysicsbody

为什么我们不能只在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

1 个答案:

答案 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冲突)