2

“吃”是指:当精灵 A(马里奥)与精灵 B(硬币)碰撞时,检测到碰撞并将硬币从场景中移除;然而,马里奥的动作并没有因与硬币的碰撞而改变。

目前我SKPhysicsContactDelegate用来记录马里奥和硬币碰撞的时间,但这似乎需要承认硬币是一个物理体——因此这意味着马里奥的运动被它阻止了。

硬币是否应该没有物理实体,我应该使用不同的方法来查看它们是否接触?

4

2 回答 2

3

根据苹果...

var categoryBitMask: UInt32 定义此物理体所属类别的掩码。

var collisionBitMask: UInt32 定义哪些类别的物理体可以与该物理体发生碰撞的掩码。

var contactTestBitMask: UInt32 一个掩码,它定义了哪些类别的物体会导致与该物理物体的交集通知。

因此,如果您只是将“Mario”上的contactTestBitMask设置为硬币categoryBitMask,并将“Mario”上的collisionBitMask设置为0(或不设置为硬币categoryBitMask),您应该能够判断2何时在didBegin(_ contact: SKPhysicsContact)func中发生碰撞,但硬币不会阻碍马里奥的行动

于 2017-09-11T22:57:39.180 回答
2

在马里奥和硬币之间建立联系而不发生碰撞

但是,如果您希望硬币在马里奥击中它时弹开,而不影响马里奥的运动,除了马里奥和硬币之间的接触之外,您还可以在硬币和马里奥之间设置碰撞,但不在马里奥和马里奥之间设置碰撞。硬币。

如果你这样做,当马里奥击中硬币时,马里奥的动作不会受到影响,但硬币会通过物理模拟从马里奥身上反弹。

为此,您可以将 Mario's 设置collisionBitMask为不包括 coin's categoryBitMask,但让硬币collisionBitMask包括 Mario's categoryBitMask

请注意,这种“单向”碰撞设置不适用于联系人,即如果马里奥设置为与马里奥接触硬币,contactTestBitMask包括硬币的类别,那么硬币是否contactTestBitMask包括马里奥的类别是无关紧要的)

于 2017-09-12T09:45:26.650 回答