"eat" SpriteKit 中某些东西的最佳方式
Best way to "eat" something in SpriteKit
"eat" 我的意思是:当精灵 A(马里奥)与精灵 B(一枚硬币)发生碰撞时,会检测到碰撞并将硬币从场景中移除;然而,马里奥的运动并没有因为与硬币的碰撞而改变。
目前我正在使用 SKPhysicsContactDelegate
来记录马里奥和硬币的碰撞时间,但这似乎需要将硬币确认为一个实体 - 因此这意味着马里奥的运动会被它停止。
硬币不应该有物理体吗,我应该用不同的方法看它们是否接触?
根据Apple...
var categoryBitMask: UInt32 A mask that defines which categories this
physics body belongs to.
var collisionBitMask: UInt32 A mask that defines which categories of
physics bodies can collide with this physics body.
var contactTestBitMask: UInt32 A mask that defines which categories of
bodies cause intersection notifications with this physics body.
因此,如果您只是将 "Mario" 上的 contactTestBitMask 设置为硬币类别位掩码,并将 "Mario" 上的碰撞位掩码设置为 0(或不设置为硬币类别位掩码),您应该能够分辨当 2 在 didBegin(_ contact: SKPhysicsContact)
函数中发生碰撞但硬币不会阻碍马里奥的移动时
在马里奥和硬币之间设置接触,而不设置碰撞
但是,如果您希望硬币在马里奥击中时弹开,而不影响马里奥的移动,除了让马里奥和硬币接触之外,您还可以在硬币和马里奥之间设置碰撞 但不是在马里奥和硬币之间。
如果这样做,当马里奥击中硬币时,马里奥的移动不会受到影响,但硬币会通过物理模拟从马里奥身上反弹。
您可以通过将马里奥的 collisionBitMask
设置为不包括硬币的 categoryBitMask
,但让硬币 collisionBitMask
包括马里奥的 categoryBitMask
来实现。
请注意,此 'one-way' 碰撞设置不适用于接触,即如果马里奥设置为接触硬币与马里奥的 contactTestBitMask
包括硬币类别,那么如果硬币的 contactTestBitMask
是否包括马里奥的类别)
"eat" 我的意思是:当精灵 A(马里奥)与精灵 B(一枚硬币)发生碰撞时,会检测到碰撞并将硬币从场景中移除;然而,马里奥的运动并没有因为与硬币的碰撞而改变。
目前我正在使用 SKPhysicsContactDelegate
来记录马里奥和硬币的碰撞时间,但这似乎需要将硬币确认为一个实体 - 因此这意味着马里奥的运动会被它停止。
硬币不应该有物理体吗,我应该用不同的方法看它们是否接触?
根据Apple...
var categoryBitMask: UInt32 A mask that defines which categories this physics body belongs to.
var collisionBitMask: UInt32 A mask that defines which categories of physics bodies can collide with this physics body.
var contactTestBitMask: UInt32 A mask that defines which categories of bodies cause intersection notifications with this physics body.
因此,如果您只是将 "Mario" 上的 contactTestBitMask 设置为硬币类别位掩码,并将 "Mario" 上的碰撞位掩码设置为 0(或不设置为硬币类别位掩码),您应该能够分辨当 2 在 didBegin(_ contact: SKPhysicsContact)
函数中发生碰撞但硬币不会阻碍马里奥的移动时
在马里奥和硬币之间设置接触,而不设置碰撞
但是,如果您希望硬币在马里奥击中时弹开,而不影响马里奥的移动,除了让马里奥和硬币接触之外,您还可以在硬币和马里奥之间设置碰撞 但不是在马里奥和硬币之间。
如果这样做,当马里奥击中硬币时,马里奥的移动不会受到影响,但硬币会通过物理模拟从马里奥身上反弹。
您可以通过将马里奥的 collisionBitMask
设置为不包括硬币的 categoryBitMask
,但让硬币 collisionBitMask
包括马里奥的 categoryBitMask
来实现。
请注意,此 'one-way' 碰撞设置不适用于接触,即如果马里奥设置为接触硬币与马里奥的 contactTestBitMask
包括硬币类别,那么如果硬币的 contactTestBitMask
是否包括马里奥的类别)