SKSpriteNode 在应该检查是否接触时相互反弹
SKSpriteNodes bounce off of each other when they should check if touching
我希望我的代码能够检查两个 SKSpriteNode(purplePentagon
和 purpleGoal
)何时接触,但是,有时如果节点运行得足够快,它就会反弹就像任何其他节点一样。
这是我在 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
设置为彼此,以便您可以检测到它们何时发生碰撞。
edit for multiple instances
self.physicsBody?.contactTestBitMask = PhysicsCategory.goal1 | PhysicsCategory.goal2 | PhysicsCategory.goal3
我希望我的代码能够检查两个 SKSpriteNode(purplePentagon
和 purpleGoal
)何时接触,但是,有时如果节点运行得足够快,它就会反弹就像任何其他节点一样。
这是我在 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
设置为彼此,以便您可以检测到它们何时发生碰撞。
edit for multiple instances
self.physicsBody?.contactTestBitMask = PhysicsCategory.goal1 | PhysicsCategory.goal2 | PhysicsCategory.goal3