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.
Je pense que nous avons besoin de la méthode World.step() pour donner un sens à tout cela. –
Quelle est la valeur de timeStep? –
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