我正在开发带有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 ......等等
答案 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);