通过“吃”我的意思是:当精灵A(马里奥)与精灵B(硬币)碰撞时,检测到碰撞并从场景中移除硬币;然而,马里奥的运动并没有因与硬币的碰撞而改变。
目前我正在使用SKPhysicsContactDelegate
注册Mario和硬币相撞时,但这似乎要求将硬币确认为身体 - 因此这意味着马里奥的动作被它停止了。 p>
如果硬币没有物理机构,我应该使用不同的方法来查看它们是否接触?
答案 0 :(得分:3)
根据Apple ...
var categoryBitMask:UInt32定义此类别的掩码 物理机构属于。
var collisionBitMask:UInt32定义哪些类别的掩码 物理团体可以与这个物理团体发生碰撞。
var contactTestBitMask:UInt32定义哪些类别的掩码 物体会导致该物理体的交叉通知。
所以如果你只是在" Mario"上设置contactTestBitMask?硬币categoryBitMask,并设置collisionBitMask on" Mario"到0(或不是硬币类别BitMask)你应该能够分辨出2在didBegin(_ contact: SKPhysicsContact)
func中碰撞但硬币不会妨碍马里奥的运动
答案 1 :(得分:2)
在Mario和硬币之间设置联系人而不设置碰撞
然而,如果你想要当马里奥击中它时硬币反弹,没有马里奥的运动受到影响,你可以,除了马里奥和硬币之间的接触,设置硬币和马里奥之间的碰撞但不是马里奥和硬币之间。
如果你这样做,当马里奥击中硬币时,马里奥的动作将不受影响,但硬币会通过物理模拟从马里奥身上反弹。
您可以通过将马里奥的collisionBitMask
设置为不包含硬币的categoryBitMask
,但让collisionBitMask
币包含马里奥的categoryBitMask
来实现此目的。
请注意,这种“单向”碰撞设置对联系人不起作用,即如果马里奥设置为与马里奥的contactTestBitMask
包括硬币的类别联系硬币,那么如果硬币的{{1}则无关紧要包括马里奥的类别或不包括)