box2d重力玩家跌倒得更快

时间:2013-02-24 15:49:43

标签: box2d game-physics jbox2d

我正在开发带有box2d for mobile的游戏。我用这些代码创造了一个世界:

b2Vec2 gravity(0.0f, 9.8f);
bool doSleep = false;
b2World* g_World = new b2World(gravity, doSleep);

它工作得很好。我有玩家对象。玩家摔倒了:

y轴:0,10,30,70 ......等。我的意思是它每秒都会下降得更快。但我希望它的速度下降速度相同。喜欢: y轴:0,10,20,30 ......等等

1 个答案:

答案 0 :(得分:1)

身体在重力的作用下坠落,因此合乎逻辑,它随着加速而下降。

如果你的世界不应该是引力,那么设置零重力矢量并为身体设置线速度:

b2Vec2 gravity(0.0f, 0f);
bool doSleep = false;
b2World* g_World = new b2World(gravity, doSleep);

b2Body* body;
<.. creating body ..>
body->setLinearVelocity(0, 10);

如果在你的世界中引力应该是,那么在b2BodyDef中将重力比例设置为零:

b2Vec2 gravity(0.0f, 9.8f);
bool doSleep = false;
b2World* g_World = new b2World(gravity, doSleep);

b2BodyDef bodyDef;
bodyDef.gravityScale = 0;
< .. set other body parameters ..>
b2Body* body;
<.. creating body ..>
body->setLinearVelocity(0, 10);

如果您使用旧版本的Box2D,并且b2BodyDef中没有此类字段,那么您有两个解决方案:

  • 按照上面的代码设置一次线速度,并在每次更新步骤中施加与重力相反的力:

    // Update cycle
    g_World->Step(elapsed, 7, 4);
    body->ApplyForceToCenter(-gravity);
    
  • 在每个更新步骤中应用线性速度,如上所述philipp:

    // Update cycle
    g_World->Step(elapsed, 7, 4);
    body->ApplyLinearVelocity(0, 10);