[英]SpriteKit: pros/cons of setting contactTestBitMask for both objects?
假设我们要监视节点A和节点B之间的联系,即使仅在其中一个节点上设置contactTestBitMask
, didBeginContact
似乎也可以正确contactTestBitMask
。 换句话说,这段代码似乎可以正常工作:
nodeA.physicsBody?.categoryBitMask = NodeACategory
nodeB.physicsBody?.categoryBitMask = NodeBCategory
nodeB.physicsBody?.contactTestBitMask = NodeACategory
在节点A上设置contactTestBitMask是否也有好处? 该代码更加简洁,只为一个对象设置了遮罩,但是有我们忽略的缺点吗?
它似乎没有任何区别。
根据Apple的文档:
当两个实体共享相同的空间时,通过执行逻辑AND操作,将每个实体的类别掩码与另一个实体的接触掩码进行测试。 如果任何一个比较结果都为非零值,则会创建一个SKPhysicsContact对象,并将其传递给物理世界的委托。 为了获得最佳性能,请仅在联系人掩码中设置您感兴趣的交互的位。
如果nodeB也未与nodeA联系,则nodeA似乎无法与nodeB联系。 所以nodeA联系nodeB; 相互联系的nodeB以及相互联系的节点A和B都被视为完全相同,并且将包含nodeA和nodeB的SKPhysicsContact
对象传递给didBeginContact
。
请注意,这与collisionBitMask
非常不同,后者的nodeA可以与nodeB碰撞并受其影响,但是nodeB可以完全不受影响。
否。在某些情况下,仅在联系对象A而不是对象B时才需要通知您。因此,每个对象都有一个contactBitMask的选项。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.