在动态物体上施加力时,即使将脉冲设置为false,似乎该力也不会持久。

我有一个带有physicsBody的sphereNode:动态,质量= 1和阻尼= 0。世界重力设置为(0,0,0)。

如果我在手势识别器中施加力:

func Detected(sender: UILongPressGestureRecognizer) {

    if sender.state == UIGestureRecognizerState.Began {
        sphereNode.physicsBody!.applyForce(SCNVector3Make(1, 0, 0), impulse: false)
    }

    if sender.state == UIGestureRecognizerState.Ended {
        sphereNode.physicsBody!.clearAllForces()
    }
}


然后,速度变为0.0166,就好像仅在一帧中施加了力并且保持恒定,除非再次触发手势。

使它成为真正恒定力的唯一方法是在渲染器循环中调用applyforce,但是与非脉冲applyforce的唯一区别是60倍。我认为这不是预期的行为。

最佳答案

我认为这应该是这样。

当您想立即改变身体的动量时,可以使用冲量。例如,您可能使用冲量从大炮发射球。就像一门大炮一样,它是“开枪而忘了”。您调用该方法,球会飞起来直到撞到某物。

若要产生连续效果,请使用力(impulse:NO)。也就是说,它不会产生连续的效果(否则就必须有API来枚举和消除每个物体上的各个连续力),但是当您要在每个帧上执行某项操作时,它会为您提供一个使用的工具。创建一个连续的效果。

例如,如果您想让太空飞船在按下按钮时加速,并一直加速直到释放它,则要用力。按住该按钮时,每次运行applyForce方法时只需调用update

impulse切换键在两种情况下有两件事:


如您所见,它会更改大小单位以适合每种情况。
使用impulse:NO时,它将评估延迟到当前帧周期结束。因此,您可以在一个update期间施加几种不同的力,当SceneKit在下一帧模拟物理时,它将施加力的总和(除非您先调用clearAllForces)。

08-26 03:31