9. Lanzamiento horizontal - nelsonmoreno/Box2d GitHub Wiki

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 horizontalmente desde cierta altura, es decir que el cuerpo tendrá una velocidad inicial solo en el componente horizontal y el ángulo respecto a este eje es cero.

   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 static polygon object
   bodyDef.type = b2Body.b2_staticBody;
   fixDef.shape = new b2PolygonShape;
   fixDef.shape.SetAsBox(
         0.9//half width
      ,  0.2 //half height
   );
   bodyDef.position.x =  2;
   bodyDef.position.y = 7.5;
   var boxBody = world.CreateBody(bodyDef);
   boxBody.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 = 7;
    ballBody = world.CreateBody(bodyDef);
    ballBody.CreateFixture(fixDef);

    //apply impulse
    ballBody.ApplyImpulse(new b2Vec2(Math.cos(0 * (Math.PI / 180)) * 3,
                    Math.sin(0 * (Math.PI / 180)) * 3),
                    ballBody.GetWorldCenter());

En este código: luego de crear el suelo, creamos una rampa desde donde lanzaremos la bala, es polígono rectangular ubicado a una altura equivalente a (canvas.height / SCALE) - 7.5, es decir que la altura será del mismo tamaño del canvas a escala de 30m menos 7.5 también a una escala de 30m, este objeto será estático dentro el mundo por lo que estará inmóvil. Luego de esto creamos una bala de radio 0.3 ubicada encima de la rampa y en la última línea definimos como aplicamos el impulso con el que se disparara la bala, según esto la bala es lanzada con un ángulo de 0 grados y una magnitud de 3, adicionalmente este código nos dice que dicho impulso será aplicado exactamente en el centro de la bala.

En las siguientes dos URL puedes encontrar la demostración y el código fuente completo:

Demostración: http://box2d-1302.appspot.com/static/lanzamientohorizontal Caida libre

Código fuente: https://github.com/nelsonmoreno/box2d/blob/master/web/static/lanzamientohorizontal/index.html