Box2D - 坠落的身体在重力作用下不会加速

时间:2012-01-22 21:18:18

标签: java android box2d physics jbox2d

我已经创建了一个落球的基本示例,但我有点迷惑为什么物体在下降时没有加速。它以恒定速度行驶,这不是我所期望的。这是我使用Box2D的第一天我假设我已经错过了一些基本的东西,但无法弄明白。

public PhysicsWorld() {
    // Step 1: Create Physics World Boundaries
    Vec2 gravity = new Vec2(0, 20);
    boolean doSleep = true;
    world = new World(gravity, doSleep);

    // Dynamic Body
    BodyDef bodyDef = new BodyDef();
    bodyDef.type = BodyType.DYNAMIC;
    bodyDef.position.set(100, 100);
    body = world.createBody(bodyDef);
    MassData md = new MassData();
    md.mass = 5;
    body.setMassData(md);
    PolygonShape dynamicBox = new PolygonShape();
    dynamicBox.setAsBox(1, 1);
    FixtureDef fixtureDef = new FixtureDef();
    fixtureDef.shape = dynamicBox;
    fixtureDef.density = 1;
    fixtureDef.friction = 0.3f;
    body.createFixture(fixtureDef);

    velocityIterations = 6;
    positionIterations = 2;

}

public void update() {
    world.step(timeStep, velocityIterations, positionIterations);
    Log.i("body", "x: " + body.getPosition().x + " y: " + body.getPosition().y);
}

输出:

01-22 21:17:20.750: I/body(7698): x: 100.0 y: 102.0
01-22 21:17:20.777: I/body(7698): x: 100.0 y: 104.0
01-22 21:17:20.796: I/body(7698): x: 100.0 y: 106.0
01-22 21:17:20.824: I/body(7698): x: 100.0 y: 108.0
01-22 21:17:20.847: I/body(7698): x: 100.0 y: 110.0

我希望每次迭代都能应用重力并在Y中增加球的速度。

2 个答案:

答案 0 :(得分:1)

这是因为速度受发动机限制,而您没有使用正确的世界坐标。可以把它想象成一个千米 - 秒的系统。你有一个1米1的箱子,每1/40秒钟下降2米,或者每秒80米。那很快。

答案 1 :(得分:0)

http://www.iforce2d.net/b2dtut/gotchas#speedlimit

如果您的帧速率为40fps,则timeStep通常为1 / 40.0f

相关问题