SpriteKit:pros/cons 为两个对象设置 contactTestBitMask?

SpriteKit: pros/cons of setting contactTestBitMask for both objects?

假设我们想要监控节点 A 和节点 B 之间的联系,即使我们只在其中一个节点上设置 contactTestBitMaskdidBeginContact 似乎也会正确触发。换句话说,这段代码似乎工作正常:

nodeA.physicsBody?.categoryBitMask = NodeACategory

nodeB.physicsBody?.categoryBitMask = NodeBCategory
nodeB.physicsBody?.contactTestBitMask = NodeACategory

在节点 A 上设置 contactTestBitMask 是否也有优势?代码更简洁,只为一个对象设置掩码,但是否有我们忽略的缺点?

没有。在某些情况下,您只需要在联系对象 A 而不是对象 B 时收到通知。因此可以选择为每个对象设置一个 contactBitMask。

似乎没有任何区别。

来自 Apple 的文档:

When two bodies share the same space, each body’s category mask is tested against the other body’s contact mask by performing a logical AND operation. If either comparison results in a nonzero value, an SKPhysicsContact object is created and passed to the physics world’s delegate. For best performance, only set bits in the contacts mask for interactions you are interested in.

节点 A 似乎不可能在节点 B 不联系节点 A 的情况下联系节点 B。所以节点A联系节点B; nodeB 联系 nodeA 和节点 A 和 B 相互联系都被认为是完全相同的,一个包含 nodeA 和 nodeB 的 SKPhysicsContact 对象将被传递给 didBeginContact

请注意,这与 collisionBitMask 非常不同,其中节点 A 可以与节点 B 碰撞并受其影响,但节点 B 可以完全不受影响。