我正在创建一个弹球游戏,并检测球和保险杠之间的碰撞。该代码在大多数情况下都有效,但有时球会穿过保险杠。我有一个打印声明,记录着球碰到了保险杠,但没有传递对球的冲动。
以下是发生碰撞时触发的代码:
func handleBallAndTargetCollision( _ theBall:Ball, target:Target, contactPoint:CGPoint) {
if target.isBumper {
print("Collided with bumper: \(target.name)")
let xDiff:CGFloat = contactPoint.x - target.position.x
let yDiff:CGFloat = contactPoint.y - target.position.y
let theForce:CGVector = CGVector(dx: xDiff * target.impactForce, dy: yDiff * target.impactForce)
theBall.physicsBody!.applyImpulse(theForce )
} else {
handleTarget(target: target)
}
}
此代码应该以与保险杠相反的方向射击球。
除了对球施加冲动之外,还有其他更好的方法吗?
为什么有时没有施加冲力,球有时会穿过保险杠?