0

在动态物体上施加力时,即使将冲量设置为 ,该力似乎也不会持久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 倍。我认为这不是预期的行为。

4

1 回答 1

2

我认为这就是它应该如何工作的方式。

当你想瞬间改变身体的动量时,你会使用冲动。例如,您可以使用冲动从大炮中发射一个球。就像一门大炮,它是“一劳永逸”;你调用这个方法,球就会飞走,直到它碰到什么东西。

当你想产生一个连续的效果时,你可以使用 force ( impulse:NO) 。也就是说,它不会导致连续效果(否则必须有 API 用于枚举和取消每个身体上的单个连续力),但它为您提供了一个工具,当您想在每一帧上做某事时使用创造一个连续的效果。

例如,如果您希望宇宙飞船在您按下按钮时加速,您将使用力,并一直加速直到您松开它。按住按钮时,只需在applyForce每次update方法运行时调用。

切换对这两种情况做了impulse两件事:

  • 正如您所注意到的,它会更改幅度单位以适合每种情况。
  • 使用 时impulse:NO,它会将评估延迟到当前帧周期结束。因此,您可以在 one 期间应用几种不同的力update,并且当 SceneKit 为下一帧模拟物理时,它将应用力的总和(除非您clearAllForces先调用)。
于 2014-12-20T00:48:52.470 回答