2012-01-22 37 views
2

我已經創建了一個落球的基本示例,但我稍微困惑了爲什麼物體在下落時不加速。它以恆定的速度行駛,這不是我所期望的。這是我使用Box2D的第一天,我假設我錯過了一些基本的東西,但無法弄清楚。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.

+1

我想我們需要World.step()方法來理解這一切。 –

+0

timeStep的價值是什麼? –

+0

它的25f,因爲我的幀速率是40.即使手冊中的第一個例子也有類似的輸出http://www.box2d.org/manual.html爲什麼這些值沒有考慮到物體上的加速度重力原因? – Moz

回答

1

這是因爲速度被引擎限制,並且您沒有使用正確的世界座標。把它想成一個米 - 千克秒系統。你有一個1乘1米的盒子,每秒鐘以1/40秒或每秒鐘80米落在2米處。這很快。