2012-01-22 3 views
2

J'ai créé un exemple de base d'une chute de balle mais je suis un peu confus à l'idée que l'objet n'accélère pas en tombant. Il voyage à vitesse constante ce qui n'est pas ce à quoi je m'attendais. C'est mon premier jour en utilisant Box2D je suppose que j'ai manqué quelque chose de basique, mais je ne peux pas le comprendre.Box2D - Chute du corps qui n'accélère pas sous l'effet de la gravité

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); 
} 

Sortie:

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 

Je me attends à la gravité à appliquer chaque itération et augmenter les boules vitesse en Y.

+1

Je pense que nous avons besoin de la méthode World.step() pour donner un sens à tout cela. –

+0

Quelle est la valeur de timeStep? –

+0

son 25f, comme mon taux de trame est de 40. Même le premier exemple dans le manuel a une sortie similaire http://www.box2d.org/manual.html pourquoi les valeurs ne tiennent pas compte des causes de gravité d'accélération sur un objet? – Moz

Répondre

1

C'est parce que la vitesse est plafonnée par le moteur et vous n'utilisez pas les coordonnées du monde correct. Pensez-y comme un système de mètre-kilogramme-seconde. Vous avez une boîte de 1 par 1 mètre tombant à 2 mètres par 1/40e de seconde, ou 80 mètres par seconde. C'est plutôt rapide.