2

落下するボールの基本的な例を作成しましたが、落下中にオブジェクトが加速しない理由が少しわかりません。一定の速度で移動していますが、これは私が期待するものではありません。これは、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 方向のボールの速度が上がると思います。

4

2 に答える 2

1

これは、速度がエンジンによって制限されており、適切なワールド座標を使用していないためです。メートル・キログラム・秒のシステムと考えてください。1 x 1 メートルの箱が 2 メートル/1/40 秒、つまり 80 メートル/秒で落下しています。それはかなり速いです。

于 2012-02-20T06:54:05.557 に答える
0

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

フレームレートが 40fps の場合、timeStep は通常 1/40.0f になります。

于 2012-02-03T07:54:03.683 に答える