Cosas generales, World y Bodies
Para llamar a las dependencias, a diferencia de box2D.js en el que se llaman muchos archivos, se hace la importación con variables ya que en javascript no se puede importar paquetes.
Ahora creamos el mundo (WORLD).
Los valores de x,y seubican de esta forma:

Bodies
Los cuerpos tienen posición y velocidad. Se les puede aplicar fuerzas, torques e impulsos. Pueden ser de 3 tipos: estáticos kinematicos, o dinámicos.
Un cuerpo estático no se mueve en la simulación y se comporta como si tuviera masa infinita. Internamente Box2D asigna 0 para la masa y la masa inversa del mismo. Los cuerpos estáticos pueden ser movidos manualmente por el usuario. Tienen 0 de velocidad. Dos cuerpos estáticos no colisionan entre si y tampoco uno estático con uno kinematico.
Se mueven en la simulación de acuerdo a su velocidad. No responden a fuerzas. Pueden ser movidos manualmente por el usuario, pero normalmente se mueven cambiando su velocidad. Se comporta como si tuviera masa infinita, sin embargo, Box2D asigna 0 para su masa y su masa inversa. No colisionan con otros cuerpos kinematicos ni estáticos. Son similares a los cuerpos estáticos en que cuando colisionan con un cuerpo dinámico siempre mantienen su posición y fuerza al cuerpo dinámico a moverse a otro lado. La diferencia es que pueden moverse.
Un cuerpo dinámico es simulado por completo. Se pueden mover manualmente por el usuario, pero normalmente se mueven de acuerdo a fuerzas. Puede colisionar con todos los tipos de cuerpos. Siempre tiene masa finita, no tiene masa 0. Si se le asigna masa 0 Box2D le asigna 1kg automáticamente.
Los Fixtures tienen geometría de colisión y densidad. Normalmente los cuerpos adquieren propiedades de masa de los fixtures. Sin embargo se puede sobre escribir las propiedades de masa después que un cuerpo es construido.
Definiendo un cuerpo:
Ahora, usamos esta definicion para crear la instancia real del cuerpo:
Definiendo las propiedades de un cuerpo:
Obteniendo propiedades de los cuerpos:
Ejemplo para iterar todos los cuerpos en un mundo:
Destrucción de un cuerpo:
var b2Vec2 = Box2D.Common.Math.b2Vec2;
var b2BodyDef = Box2D.Dynamics.b2BodyDef;
var b2Body = Box2D.Dynamics.b2Body;
var b2FixtureDef = Box2D.Dynamics.b2FixtureDef;
var b2Fixture = Box2D.Dynamics.b2Fixture;
var b2World = Box2D.Dynamics.b2World;
var b2MassData = Box2D.Collision.Shapes.b2MassData;
var b2PolygonShape = Box2D.Collision.Shapes.b2PolygonShape;
var b2CircleShape = Box2D.Collision.Shapes.b2CircleShape;
var b2DebugDraw = Box2D.Dynamics.b2DebugDraw;Ahora creamos el mundo (WORLD).
var world = new b2World(new b2Vec2(0,10), true);Los valores de x,y seubican de esta forma:
Bodies
Los cuerpos tienen posición y velocidad. Se les puede aplicar fuerzas, torques e impulsos. Pueden ser de 3 tipos: estáticos kinematicos, o dinámicos.
b2_staticBody (Type = 0)
Un cuerpo estático no se mueve en la simulación y se comporta como si tuviera masa infinita. Internamente Box2D asigna 0 para la masa y la masa inversa del mismo. Los cuerpos estáticos pueden ser movidos manualmente por el usuario. Tienen 0 de velocidad. Dos cuerpos estáticos no colisionan entre si y tampoco uno estático con uno kinematico.
b2_kinematicBody (Type = 1)
Se mueven en la simulación de acuerdo a su velocidad. No responden a fuerzas. Pueden ser movidos manualmente por el usuario, pero normalmente se mueven cambiando su velocidad. Se comporta como si tuviera masa infinita, sin embargo, Box2D asigna 0 para su masa y su masa inversa. No colisionan con otros cuerpos kinematicos ni estáticos. Son similares a los cuerpos estáticos en que cuando colisionan con un cuerpo dinámico siempre mantienen su posición y fuerza al cuerpo dinámico a moverse a otro lado. La diferencia es que pueden moverse.
b2_dynamicBody (Type = 2)
Un cuerpo dinámico es simulado por completo. Se pueden mover manualmente por el usuario, pero normalmente se mueven de acuerdo a fuerzas. Puede colisionar con todos los tipos de cuerpos. Siempre tiene masa finita, no tiene masa 0. Si se le asigna masa 0 Box2D le asigna 1kg automáticamente.
Los cuerpos(bodies) son la columna vertebral de las fixtures. Ellos llevan muchas fixtures y las mueven con ellos mismos. Los cuerpos son siempre rigidos en box2d. Eso significa que dos fixtures asignadas a un cuerpo nunca se mueven relativas una de otra.
Los Fixtures tienen geometría de colisión y densidad. Normalmente los cuerpos adquieren propiedades de masa de los fixtures. Sin embargo se puede sobre escribir las propiedades de masa después que un cuerpo es construido.
Definiendo un cuerpo:
var bodyDef = new b2BodyDef;
bodyDef.type = b2Body.b2_dynamicBody;
bodyDef.position.Set(4,8);
bodyDef.userData = 'BOX';Ahora, usamos esta definicion para crear la instancia real del cuerpo:
var myBody = world.CreateBody(bodyDef);Definiendo las propiedades de un cuerpo:
myBody.SetPositionAndAngle(new b2Vec2(10,0),Math.PI/2);
myBody.SetLinearVelocity(new b2Vec2(4, 3));
myBody.SetAngularVelocity(Math.PI);Obteniendo propiedades de los cuerpos:
var pos = new b2Vec2; //Vector para guardar la posición
var vel = new b2Vec2; //Vector para guardarla velocidad
float angle; // Nuevo "float" para guardar el angulo de inclinación del cuerpo
pos = myBody.GetPosition(); //Vector Get Position
angle = (myBody.GetAngle())*(180/Math.PI); //Convierte radianes que son retornados a ángulo
vel = myBody.GetLinearVelocity(); //vector Get linear velocity
var x_pos = pos.x; // Posición con respecto al eje X
var y_pos = pos.y; // Posición con respecto al eje Y
var x_vel = vel.x; // Velocidad en X
var y_vel = vel.y; // Velocidad en YEjemplo para iterar todos los cuerpos en un mundo:
var b = new b2BodyDef;
for(b = world.GetBodyList(); b; b = b.GetNext()) {
//Realizar la acción que se desee con el cuerpo o los cuerpos
}Destrucción de un cuerpo:
world.DestroyBody(myBody);
Comentarios
Publicar un comentario