【问题标题】:PhysicsJS Friction BehaviorPhysicsJS 摩擦行为
【发布时间】:2016-02-25 23:46:24
【问题描述】:

我是physicsjs 的新手,正在创建一些测试模拟以熟悉该库。

我想模拟多个在屏幕上滑动的盒子,它们都会经历不同程度的摩擦。到目前为止,我有 3 个框从屏幕的左边框开始,并且都有一个 pos xvel。我不确定在模拟中增加摩擦的最佳方法是什么。所有 3 个盒子都不应受到摩擦的相同影响。因此,我需要某种方式将通用摩擦算法应用于所有盒子,但是摩擦量需要取决于它当前作用于哪个盒子。

【问题讨论】:

  • 你能发布你已经拥有的代码吗?

标签: javascript physicsjs


【解决方案1】:

摩擦是内置的(但它不是最好的算法)。

只需使用:

Physics.body('rectangle', {
     width: 40,
     height: 40,
     cof: 0.5, // <-- change the friction. range [0, 1]
     x: ...
     ...
});

【讨论】:

  • 但是,如果将相同的恒定加速度应用于具有不同摩擦系数(分别为 0 和 0.9)的两个物体,它们的运动是相同的。为什么?
  • 那是因为他们没有接触任何东西。空旷的空间没有摩擦。您必须添加一个地面主体让它们滑动才能看到效果
  • 这当然是有道理的。谢谢你。 :)
  • 你能把它设置为“答案”吗 plz :)?
【解决方案2】:

空的空间摩擦可以这样完成。无论球在做什么,它都在减速。

它侦听滴答事件,然后在每次更新时通过摩擦量降低速度。

```

function applyFriction(obj, friction) {
    // invert it so that 0.1 friction is a multiplication of 0.9 to x.
    // it makes more sense to apply 0.1 as friction that way.
    var value = 1 - friction;
    obj.state.vel.set(obj.state.vel.x * value, obj.state.vel.y * value);
}

// subscribe to the ticker
Physics.util.ticker.on(function (time) {
    applyFriction(ball, 0.1);// apply friction to the ball.
    world.step(time);
});

// start the ticker
Physics.util.ticker.start();

```

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多