1

首先,这是我在 StackOverflow 上写的第一篇文章,而且我实际上是编程新手,所以如果我说错了,我很抱歉。

我尝试并尝试完成这项工作 - 我想模拟一个静止在空中的身体,为此我使用SetLinearVelocity(new b2Vec2(0, 0)).

正如我在其他帖子中所读到的,重力矢量似乎很重要:它是一个b2Vec2(0, 30);并且我的时间步长为 1/30 秒。

处理该特定主体机制的代码如下:

this.clocktick = function(deltaT) {
    this.body.SetLinearVelocity(new b2Vec2(0, 0));

    if(this.body.GetLinearVelocity().y != 15){
        console.debug(this.body.GetLinearVelocity().y);
    }
}

我觉得很有趣的是,body 总是在下降,而且我已经遇到过这样的情况,即使它在下降,调试也会返回 0 值。

我只想听听解决方案或其他一些建议来模拟我打算模拟的内容。

谢谢

4

1 回答 1

2

您需要施加一个力来抵消重力,而不是设置速度。如果你只是设置速度,重力仍然可以在每个时间步将它向下推一点。力需要与重力将施加的力相同,因此应考虑重力矢量和物体的质量:

body.ApplyForce( body.GetMass() * -world.GetGravity(), body.GetWorldCenter() );

...并且您需要在每个时间步骤之前执行此操作。

于 2012-07-19T01:09:10.320 回答