SceneKit - 选项冲量如何适用于方法applyForce?

问题描述 投票:0回答:1

当在动态身体上施加力时,即使冲动设定在false,似乎该力也不会持久。

我有一个带有physicsBody的sphereNode:dynamic,mass = 1和damping = 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,但是与非冲动应用程序的唯一区别是60倍。我不认为这是预期的行为。

ios swift scenekit scnnode
1个回答
1
投票

我认为这是应该如何工作的。

当你想瞬间改变身体的动量时,你会使用冲动。例如,你可以用冲动从大炮射出一个球。就像一门大炮,它是“火与忘记”;你打电话给方法,球飞了,直到它击中了什么。

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

例如,如果您希望在按下按钮时加速飞船加速,并使用加速直到释放它,就会使用力。按住按钮时,每次运行applyForce方法时都要调用update

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

  • 正如您所注意到的那样,它会改变每个案例的大小。
  • 使用impulse:NO时,它会延迟评估,直到当前帧周期结束。所以你可以在一个update中应用几种不同的力,当SceneKit为下一帧模拟物理时,它将应用力的总和(除非你先调用clearAllForces)。
© www.soinside.com 2019 - 2024. All rights reserved.