Box2D的。试图了解需要多大的力量

时间:2016-08-27 23:34:32

标签: java libgdx box2d

我试图了解移动物体所需的力量。这就是我的世界设置和物理步骤的完成

private void setupWorld() {
    mWorld = new World(new Vector2(0f, -9.8f), true);

    BodyDef bodyDef = new BodyDef();
    bodyDef.type = BodyDef.BodyType.DynamicBody;
    bodyDef.position.set(x, y);

    body = world.createBody(bodyDef);

    PolygonShape box=new PolygonShape();
    box.setAsBox(1,1);

    FixtureDef fixtureDef = new FixtureDef();
    fixtureDef.shape = box;
    fixtureDef.density = 1f;
    fixtureDef.friction = 0.0f;
    fixtureDef.restitution = 0.0f;

    Fixture fixture = body.createFixture(fixtureDef);
    box.dispose();
}

private void doPhysicsStep(float deltaTime) {
    float frameTime = Math.min(deltaTime, 0.25f);
    accumulator += frameTime;
    while (accumulator >= TIME_STEP) {
        body.applyForceToCenter(new Vector2(0, 10f), true);
        world.step(TIME_STEP, VELOCITY_ITERATIONS, POSITION_ITERATIONS);
        accumulator -= (TIME_STEP);
    }
}

所以我有一个密度为1的1x1盒子。重力设置为-9.8并且我期待当我向我的盒子施加大于重力的力量时(在这个例子中我是将它设置为10)盒子应该开始向上移动。

但是盒子不动了。我必须在开始移动框之前将力设置为大约80(即body.applyForceToCenter(new Vector2(0, 80f), true);)。

我认为这是由于我的时间步长(我目前设定为1 / 60f),但如果考虑到这一点会减少我在每一步中应用的力量。

有人可以解释一下我在这里算错了吗?

1 个答案:

答案 0 :(得分:1)

您的方框的质量为4而非1,因为方法setAsBox(float hx, float hy) hx表示所需宽度的一半,而hy表示所需高度的一半。因此,如果您想要一个1 x 1的盒子,您将拨打setAsBox(0.5F, 0.5F)

但这并不能解释为什么你需要一个80的力来移动它,因为50的力量应该足以产生影响。

Fg = m * g = 9.8 * 4 = 39.2

在我对质量4对象的测试项目中,当以编程方式应用时,即使是40的力也是显而易见的(应用程序启动和按下按钮的延迟是显着的,所以我避免它。)