为什么SCNPhysicsContact.collisionImpulse始终为0.0?

时间:2017-02-10 13:03:54

标签: ios scenekit

我试图在Scene Kit的物理引擎中找出碰撞的力量。为了简单起见,我使用以下代码:

extension MyScene: SCNPhysicsContactDelegate {
   func physicsWorld(_ world: SCNPhysicsWorld, didBegin contact: SCNPhysicsContact) {
      print("collisionImpulse=\(contact.collisionImpulse)")
   }

根据contactBitmasks和collisionBitmasks为每次碰撞调用该函数,但每次我都联系.collisionImpulse = 0.0

这是Scene Kit的错误吗?我做错了什么?

我放弃了尝试解决此问题并使用以下内容:

    let factor: Float = 1.2
    let relativeVelocity = contact.nodeA.physicsBody!.velocity - contact.nodeB.physicsBody!.velocity
    let velMagnitude = relativeVelocity.length()
    let force = min(velMagnitude*factor, 1.0)

SCNVector3减法的辅助函数:

/// Vector subtract
func - (l: SCNVector3, r: SCNVector3) -> SCNVector3 {
    return SCNVector3(l.x-r.x, l.y-r.y, l.z-r.z)
}

1 个答案:

答案 0 :(得分:1)

如果您使用" didEnd"则crashImpulse不是nil。或" didUpdate"而不是" didBegin":

func physicsWorld(_ world: SCNPhysicsWorld, didEnd contact: SCNPhysicsContact) {
      print("collisionImpulse=\(contact.collisionImpulse)")
}

我的猜测是,在didBegin调用时尚未计算出值。