为什么即使我的重力出现设定,我的线速度也会恢复为0

时间:2013-07-05 17:15:01

标签: c++ box2d

我正在使用Box2D,我正在将旧版本的一些代码移植到新版本。一个旧版本的一切都运行良好,但是,在较新的版本上,重力似乎不会影响LinearVelocity。我做错了吗?

好的,这是代码......

制作我的世界(gx = 0 gy = -10)...

b2Vec2 gravity;
gravity.Set(gx, gy);
LOGD("Gravity set to %f, %f", gx, gy);
world = new b2World(gravity);

创建身体......

b2BodyDef bd;
bd.type = b2_dynamicBody;
bd.position.Set(x, y);
b2Body* b = world->CreateBody(&bd);
b2PolygonShape pd;
b2Vec2 center;
center.Set(x, y);
pd.SetAsBox(width, height, center, angle);
b2FixtureDef fixtureDef;
fixtureDef.shape = &pd;
fixtureDef.density = density;
fixtureDef.friction = 0.3f;
b->CreateFixture(&fixtureDef);

但是,当我完成我的步骤......

LOGD("Gravity is %f", world->GetGravity().y);
world->Step(dt, iterations, iterations);
for (b2Body* b = world->GetBodyList(); b; b = b->GetNext())
{
    b2Vec2 position = b->GetPosition();
    float32 angle = b->GetAngle();
    float32 yVelocity = b->GetLinearVelocity().y;
    LOGD("Stepping %4.2f %4.2f %4.2f %f \n", position.x, position.y, angle, yVelocity);
}

旧的控制台输出是(两者都包括接地盒)......

D/Native  ( 4243): Stepping 0.00 -1.02 0.00 -0.500000 
D/Native  ( 4243): Stepping 0.00 0.00 0.00 0.000000 
D/Native  ( 4243): Stepping 0.00 -1.06 0.00 -1.000000 
D/Native  ( 4243): Stepping 0.00 0.00 0.00 0.000000 
D/Native  ( 4243): Stepping 0.00 -1.13 0.00 -1.500000 
D/Native  ( 4243): Stepping 0.00 0.00 0.00 0.000000 

这里的一切看起来都很好,但在我的事情上变得奇怪......

D/Native  ( 4310): Stepping 0.00 -0.86 0.02 -0.000000 
D/Native  ( 4310): Stepping 0.00 -10.00 0.00 0.000000 
D/Native  ( 4310): Stepping 0.00 -0.73 0.04 0.000000 
D/Native  ( 4310): Stepping 0.00 -10.00 0.00 0.000000 
D/Native  ( 4310): Stepping 0.00 -0.60 0.05 0.000000 
D/Native  ( 4310): Stepping 0.00 -10.00 0.00 0.000000 

因为你可以看到除了有一个角度(原来的角度没有),y方向上没有线性速度。我在这里遗失了一些变化吗?

BTW这里是他们创造世界的旧方式,他们的代码也没有使用夹具只是形状...

b2AABB aabb;
aabb.lowerBound.Set(x1, y1);
aabb.upperBound.Set(x2, y2);

b2Vec2 gravity;
gravity.Set(gx, gy);

world = new b2World(aabb, gravity, canSleep);

1 个答案:

答案 0 :(得分:0)

看起来边界框已成为obsolete所以我不确定是否有办法在Box2D中使用负位置。所以对我来说,我必须将所有对象移动到1,并相应地将我的翻译更新为OpenGL。我仍然不是100%肯定这是最终所有答案所以我不会接受它,我希望有人能给出更好的答案。

相关问题