1

我正在使用 box2d 为移动设备开发游戏。我通过这些代码创建了一个世界:

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..等

4

1 回答 1

2

身体在重力的作用下下落,所以顺理成章地加速下落。

如果在您的世界中不应该是重力,则将重力矢量设置为零并为身体设置线速度:

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);
    
  • 如菲利普所说,在每个更新步骤应用线速度:

    // Update cycle
    g_World->Step(elapsed, 7, 4);
    body->ApplyLinearVelocity(0, 10);
    
于 2013-02-24T17:52:58.190 回答