“吃”是指:当精灵 A(马里奥)与精灵 B(硬币)碰撞时,检测到碰撞并将硬币从场景中移除;然而,马里奥的动作并没有因与硬币的碰撞而改变。
目前我SKPhysicsContactDelegate
用来记录马里奥和硬币碰撞的时间,但这似乎需要承认硬币是一个物理体——因此这意味着马里奥的运动被它阻止了。
硬币是否应该没有物理实体,我应该使用不同的方法来查看它们是否接触?
“吃”是指:当精灵 A(马里奥)与精灵 B(硬币)碰撞时,检测到碰撞并将硬币从场景中移除;然而,马里奥的动作并没有因与硬币的碰撞而改变。
目前我SKPhysicsContactDelegate
用来记录马里奥和硬币碰撞的时间,但这似乎需要承认硬币是一个物理体——因此这意味着马里奥的运动被它阻止了。
硬币是否应该没有物理实体,我应该使用不同的方法来查看它们是否接触?
根据苹果...
var categoryBitMask: UInt32 定义此物理体所属类别的掩码。
var collisionBitMask: UInt32 定义哪些类别的物理体可以与该物理体发生碰撞的掩码。
var contactTestBitMask: UInt32 一个掩码,它定义了哪些类别的物体会导致与该物理物体的交集通知。
因此,如果您只是将“Mario”上的contactTestBitMask设置为硬币categoryBitMask,并将“Mario”上的collisionBitMask设置为0(或不设置为硬币categoryBitMask),您应该能够判断2何时在didBegin(_ contact: SKPhysicsContact)
func中发生碰撞,但硬币不会阻碍马里奥的行动
在马里奥和硬币之间建立联系而不发生碰撞
但是,如果您希望硬币在马里奥击中它时弹开,而不影响马里奥的运动,除了马里奥和硬币之间的接触之外,您还可以在硬币和马里奥之间设置碰撞,但不在马里奥和马里奥之间设置碰撞。硬币。
如果你这样做,当马里奥击中硬币时,马里奥的动作不会受到影响,但硬币会通过物理模拟从马里奥身上反弹。
为此,您可以将 Mario's 设置collisionBitMask
为不包括 coin's categoryBitMask
,但让硬币collisionBitMask
包括 Mario's categoryBitMask
。
请注意,这种“单向”碰撞设置不适用于联系人,即如果马里奥设置为与马里奥接触硬币,contactTestBitMask
包括硬币的类别,那么硬币是否contactTestBitMask
包括马里奥的类别是无关紧要的)