繁体   English   中英

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

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

假设我们要监视节点A和节点B之间的联系,即使仅在其中一个节点上设置contactTestBitMaskdidBeginContact似乎也可以正确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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM