jueves, 12 de abril de 2012

QuickBox2D motor físico utilizado en AS3





Esta semana comencé a utilizar este motor 2D, que permite crear una variedad de efectos de simulación física; voy mostrar cómo utilizar unas pequeñas demos para familiarizarme con esta grandiosa herramienta.

Box2D es una biblioteca física creada por Erin Catto e implementado en AS3 por Matthew Bush y Jhon Nesky, para estos proyectos nuevos estoy utilizando Box2DFlashAS3 que simplifica la instanciación de cuerpos rígidos y de manera fácil personalizar esos gráficos.

Lo primero que necesitamos es descargar las librerías necesarias de sourceforge; tenemos que descargar la versión 2.0.2 que es una versión estable; luego necesitamos el QuickBox2D la cual la descargamos de actionsnippet.com y descargar la versión recomendada QuickBox2D 1.1 una vez descargados todas las librerías que necesitamos nos ponemos a trabajar.

Necesitamos configurar nuestro Flash por eso abrimos flash y creamos un nuevo archivo flash; guardamos ese archivo y configuramos nuestra carpeta de trabajo, extraemos las librerías descargadas en la carpeta de trabajo donde guardamos nuestro nuevo archivo flash, debería quedar asi nuestra carpeta de trabajo.
 


Es el momento de crear nuestros primeros cuerpos rígidos, para eso creamos una nueva layer y le damos el nombre de Actions, luego abrimos el panel de código y vamos a escribir el siguiente código:



import com.actionsnippet.qbox.*;  
  
var sim:QuickBox2D = new QuickBox2D(this);  
  
sim.createStageWalls();  

sim.addBox({x:3, y:3, width:1, height:2});
sim.addBox({x:5, y:6, width:3, height:3});
sim.addBox({x:7, y:9, width:1, height:2});  
sim.addCircle({x:4, y:6, radius:1});

for(var i:uint=0; i<=10; i++)
{
 sim.addBox({x:6, y:8, width:0.5, height:0.5});
 sim.addCircle({x:5, y:7, radius:0.5});
}
  
sim.start();  
sim.mouseDrag() 

Ahora probamos nuestro código y deberemos obtener lo siguiente:

Es interesante que con una pequeña cantidad de código se pueda lograr esto, lo primero que se hace es crear una instancia QuickBox2D y pasarlo a un constructor en línea de tiempo, esto hace que todos los objetos que se llamen a partir de ese momento sean cuerpos rígidos y cualquier referencia a esos se hace por medio de el constructor QuickBox2D la cual en este programa en especifico se los guarda en la variable creada llamada sim (viene de “simulación”...pero en realidad se le puede asignar cualquier nombre).
Para crear las paredes que definen el escenario hacemos uso del método createStageWall();que es necesario para que los objetos que vamos a crear no caigan fuera del escenario, luego se debe de crear los cuerpos rigidos que actuaran en ese escenario; se puede notar que la asignación de propiedades a los objetos trbaja de la misma manera que lo hacen otros motores de interpolación populares que permiten introducir un numero de argumentos que facilita a la lectura sintáctica.
Con el método addBox() lo que hacemos es crear una caja la cual necesita parámetros de posición y tamaño, de igual manera addCircle(); para iniciar la simulación usamos la sentencia start(), y la función que nos permite arrastrar los objetos con el mouse es mouseDrag().
Una parte esencial de comprender este motor físico es el manejo de el sistema de coordenadas al cual no estamos acostumbrados en un entorno flash ya que para las posiciones se maneja pixeles, Box2D utiliza metros en lugar de pixeles y se debe de tener en cuenta que 1 metro equivale a 30 px.
Todavía es solo es una pequeña demo de lo que este gran motor físico puede hacer pronto estaré haciendo más experimentos y probando nuevas cosas para mis desarrollos por lo que me será de gran ayuda al momento de programar efectos interesantes.