10. Tiro parabólico - nelsonmoreno/Box2d GitHub Wiki
Al igual que el movimiento horizontal el tiro parabólico corresponde a un m.r.u. (movimiento rectilíneo uniforme) respecto al eje horizontal y a un m.r.u.a. (movimiento rectilíneo uniformemente acelerado) respecto al eje vertical. Dicho movimiento consiste en lanzar un cuerpo con una determinada velocidad inicial respecto a los dos ejes (vertical y horizontal) y con un ángulo α respecto a la horizontal mayor que cero. La siguiente figura representa tal situación:
var bodyDef = new b2BodyDef;
//create ground
bodyDef.type = b2Body.b2_staticBody;
// positions the center of the object (not upper left!)
bodyDef.position.x = canvas.width / 2 / SCALE;
bodyDef.position.y = (canvas.height / SCALE) - 1;
fixDef.shape = new b2PolygonShape;
// half width, half height. eg actual height here is 1 unit
fixDef.shape.SetAsBox((canvas.width / SCALE) / 2, 0.5 / 2);
world.CreateBody(bodyDef).CreateFixture(fixDef);
//create dynamic ball object
bodyDef.type = b2Body.b2_dynamicBody;
fixDef.shape = new b2CircleShape(
0.3 //radius
);
bodyDef.position.x = 2;
bodyDef.position.y = (canvas.height / SCALE) - 1.5;
ballBody = world.CreateBody(bodyDef);
ballBody.CreateFixture(fixDef);
//apply impulse
ballBody.ApplyImpulse(new b2Vec2(Math.cos(84 * (Math.PI / 180)) * 23,
Math.sin(84 * (Math.PI / 180)) * 23),
ballBody.GetWorldCenter());
Este fragmento de código es muy similar al que empleamos en el lanzamiento horizontal (ver sección anterior), a diferencia de este ya no utilizamos una rampa pues la bala es lanzada desde el piso y ademas cambiamos los parámetros del impulso que ahora tienen un ángulo y una magnitud mayor.
En las siguientes dos URL puedes encontrar la demostración y el código fuente completo:
Demostración: http://box2d-1302.appspot.com/static/lanzamientoparabolico
Código fuente: https://github.com/nelsonmoreno/box2d/blob/master/web/static/lanzamientoparabolico/index.html