我第一次玩Box2D。我已经构建了一个简单的测试应用程序,它由一个代表地面的静态物体和一个小的,动态的盒子组成,它落在前者上。然后,我决定尝试使用力,指定一个键,使向上的力被施加到盒子上。它按预期工作,但只有当我确保在盒子完全静止之前触发力时才会出现这种情况。预期会出现这种情况吗?
FWIW,这里是如何定义动态框的正文,形状和夹具:
b2BodyDef body_def;
body_def.type = b2_dynamicBody;
body_def.position.Set(position.x, position.y);
body = world.CreateBody(&body_def);
b2PolygonShape shape;
shape.SetAsBox(size.width / 2.0f, size.height / 2.0f);
b2FixtureDef fixture_def;
fixture_def.shape = &shape;
fixture_def.density = 1.0f;
fixture_def.friction = 0.3f;
这是应用向上力量的代码:
b2Body* body = box.b2_body();
body->ApplyForce(b2Vec2(0.0f, 15.0f), body->GetPosition(), false);
这是模拟步骤:
world.Step(time_step, velocity_iterations, position_iterations);
其中:
time_step
是1/60 velocity_iterations
是6;和position_iterations
是2。如果需要进一步的信息,请告诉我。
谢谢。
答案 0 :(得分:2)
body->ApplyForce(b2Vec2(0.0f, 15.0f), body->GetPosition(), false);
ApplyForce
的第三个参数告诉Box2D是否应该允许它唤醒对象。你告诉Box2D不要唤醒对象。将此参数更改为true。