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

时间:2018-02-18 21:08:55

标签: swift sprite-kit skphysicsbody

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

这是我在GameScene.swift

中的update()函数中的代码
if(purplePentagon?.physicsBody?.allContactedBodies().contains((purpleGoal?.physicsBody)!))! {
    purplePentagon?.isHidden = true
    purplePentagon?.physicsBody?.isDynamic = false
    purpleScored = true
}

如果purplePentagon速度不快,但如果速度很快,它就会很好地反弹。

1 个答案:

答案 0 :(得分:1)

为什么要检查更新中的物理联系人? 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