当他们应该检查是否接触时,SKSpriteNodes会互相反弹

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了当他们应该检查是否接触时,SKSpriteNodes会互相反弹相关的知识,希望对你有一定的参考价值。

我希望我的代码能够检查两个SKSpriteNodes(purplePentagonpurpleGoal)何时触摸,但是,有时如果节点速度足够快,它就会像任何其他节点一样反弹。

这是我在GameScene.swift的update()函数中的代码

if(purplePentagon?.physicsBody?.allContactedBodies().contains((purpleGoal?.physicsBody)!))! {
    purplePentagon?.isHidden = true
    purplePentagon?.physicsBody?.isDynamic = false
    purpleScored = true
}

如果purplePentagon不是那么快就能很好地运行,但如果速度很快它就会反弹。

答案

为什么要检查更新中的物理联系人? vs使用内置的物理功能

func didBeginContact(contact: SKPhysicsContact)

您可能已将碰撞位掩码设置为彼此以及接触位掩码

self.physicsBody?.contactTestBitMask = PhysicsCategory.goal
self.physicsBody?.collisionBitMask = PhysicsCategory.obstacle

如果你不希望它们互相反弹,请确保physicsBody的collisionBitMask属性不包含其他对象。但保持contactTestBitMask相互设置,以便您可以检测到它们何时发生碰撞。

编辑多个实例

self.physicsBody?.contactTestBitMask = PhysicsCategory.goal1 | PhysicsCategory.goal2 | PhysicsCategory.goal3

以上是关于当他们应该检查是否接触时,SKSpriteNodes会互相反弹的主要内容,如果未能解决你的问题,请参考以下文章

如何检查一个 sknode 是不是触及另一个

阻止 SKSpriteNode 减速

如何检查两个 SKSpriteNode 是不是彼此靠近?

SKSpriteNode 不应受另一个 SKSpriteNode 影响

改变移动 SKSpriteNode 的方向?

如何检测 SKSpriteNode 接触但不反应?