SpriteKit:为两个对象设置contactTestBitMask的优缺点?

时间:2015-03-24 19:13:37

标签: ios swift sprite-kit

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

nodeA.physicsBody?.categoryBitMask = NodeACategory

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

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

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:2)

它似乎没有任何区别。

来自Apple的文档:

  

当两个物体共享相同的空间时,每个物体的类别掩码都是   通过执行逻辑来测试另一个身体的接触面罩   和操作。如果任一比较结果为非零值,则为   创建SKPhysicsContact对象并将其传递给物理世界   代表。为获得最佳性能,仅在触点掩码中设置位   您感兴趣的互动。

如果nodeB没有联系nodeA,nodeA似乎无法联系nodeB。所以nodeA联系nodeB; nodeB联系nodeA和节点A& B彼此接触都被认为是完全相同的,并且包含nodeA和nodeB的SKPhysicsContact对象将被传递给didBeginContact

请注意,这与collisionBitMask非常不同,其中nodeA可以与nodeB冲突并受其影响,但nodeB可以完全不受影响。