Single Tech Games

LibGDX y Box2D, un ejemplo funcional

Hola mis queridos sobrevivientes del fin del mundo, hoy estuve desarrollando el siguiente tutorial de Box2D en LibGDX estaba muy entusiasmado hasta que iba llegando al final cuando me di cuenta que no entendía mucho u_u , es que si no lo veo funcionando y lo malogro, no aprendo nada en programación, así que utilizando lo que aprendimos en el primer tutorial y mirando en la web, podemos crear el más basico de todos los ejemplos, una pelota rebotando:

public class box2dPrueba implements ApplicationListener {
World mundo;
Box2DDebugRenderer debugDelRenderizador;
OrthographicCamera camara;
static final float PASOS_CAJA=1/60f;
static final int VELOCIDAD_ITERACION_CAJA=6;
static final int POSICION_ITERACION_CAJA=2;
@Override
public void create() {
camara = new OrthographicCamera();
camara.viewportHeight = 320;
camara.viewportWidth = 480;
camara.position.set(camara.viewportWidth * .5f, camara.viewportHeight * .5f, 0f);
camara.update();
//Definimos el mundo
mundo = new World(new Vector2(0, -100), true);
//Definimos el piso
BodyDef defCuerpoPiso =new BodyDef();
defCuerpoPiso.position.set(new Vector2(0, 10)); // posicion del piso
Body cuerpoPiso = mundo.createBody(defCuerpoPiso);  //Creamos el cuerpo del piso
PolygonShape formaPiso = new PolygonShape();  //Definimos la forma del piso
formaPiso.setAsBox((camara.viewportWidth) * 2, 10.0f);  //Los vertices
cuerpoPiso.createFixture(formaPiso, 0.0f);  // Creamos el fixture
//Cuerpo Dinamico (pelota)
BodyDef defCuerpoPelota = new BodyDef();
defCuerpoPelota.type = BodyType.DynamicBody;  //Cuerpo dinamico
defCuerpoPelota.position.set(camara.viewportWidth / 2, camara.viewportHeight / 2); //Posicion del cuerpo
Body cuerpoPelota = mundo.createBody(defCuerpoPelota);  //Creamos el cuerpo de la pelota
CircleShape formaCirculo = new CircleShape();  //Definimos la forma del circulo
formaCirculo.setRadius(5f);  // Definimos el tamaño
FixtureDef defFixture = new FixtureDef();  // Definimos el fixture
defFixture.shape = formaCirculo;  // Le pasasamos la forma
defFixture.density = 1.0f;  // Le pasamos la densidad
defFixture.friction = 0.0f;  // Le pasamos la friccion
defFixture.restitution = 1;  //Le agregamos la restitucion
cuerpoPelota.createFixture(defFixture);  // Creamos el fixture
debugDelRenderizador = new Box2DDebugRenderer();  //Para el debug de la renderizacion (las rayas que se dibujan)
}
@Override
public void dispose() {
}
@Override
public void render() {
Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
debugDelRenderizador.render(mundo, camara.combined);  // con esto dibujamos las rayas
mundo.step(PASOS_CAJA, VELOCIDAD_ITERACION_CAJA, POSICION_ITERACION_CAJA);
}
@Override
public void resize(int width, int height) {
}
@Override
public void pause() {
}
@Override
public void resume() {
}
}


El código ya esta super explicado así que no creo que tengan problemas para entenderlo.
Suerte!

0 0 votes
Article Rating
Subscribe
Notify of
guest
6 Comments
Newest
Oldest Most Voted
Inline Feedbacks
View all comments
Rodrigo

que versiones de jbox2d y libgdx estan usando????

Horacio

Es excelente tu ejemplo. Gracias.

JuanP.

Excelente tutorial, tienes razón el código está muy bien explicado