在SpriteKit中“吃东西”的最佳方式

问题描述:

“吃”我的意思是:当精灵A(马里奥)与精灵B(一枚硬币)碰撞时,碰撞被检测到并且硬币从场景中移除;然而,马里奥的运动并没有因与硬币的碰撞而改变。在SpriteKit中“吃东西”的最佳方式

目前我使用SKPhysicsContactDelegate注册时,马里奥和硬币相撞,但这似乎要求承认硬币是一个身体 - 这意味着马里奥的运动被它阻止。

如果硬币没有一个物理体,而应该使用不同的方法来查看它们是否接触?

+0

就SpriteKit而言,您描述的是接触而非碰撞。 –

根据Apple ...

VAR categoryBitMask:UInt32的定义此 物理体属于哪个类别的掩模。

var collisionBitMask:UInt32一个掩码,用于定义物理实体可以与该物理主体碰撞的类别。

var contactTestBitMask:UInt32一个掩码,用于定义哪些类别的 正文会与此物理主体产生交集通知。

所以,如果你只是设置的“马里奥”的contactTestBitMask到硬币categoryBitMask,并在“马里奥”设置collisionBitMask为0(或不硬币categoryBitMask),你应该得到能够告诉2时碰撞在didBegin(_ contact: SKPhysicsContact) FUNC但硬币不会妨碍马里奥的移动

+0

非常感谢! – modalmusic

设置马里奥和硬币之间的联系没有建立碰撞

但是,如果你想要的硬币弹起离开时,马里奥击中它,没有马里o的运动受到影响,除了Mario和硬币之间有接触之外,您还可以在Mario和硬币之间设置硬币和Mario 但不是之间的碰撞。

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

通过设置马里奥的collisionBitMask不包括硬币的categoryBitMask,但有硬币collisionBitMask包括马里奥的categoryBitMask做到这一点。

注意,这个“单向”碰撞设置不工作联系人,即如果马里奥建立联系与马里奥的contactTestBitMask包括硬币的种类的硬币,那么它是不相关的,如果硬币的contactTestBitMask包括的马里奥的类别或不)