Programación de Juegos para Android

Programación de Juegos para Android 21: Box 2D DebugRenderer

42 videos

238 minutos

Habíamos dejado esto funcionando, y nos habíamos quedado en el por qué no vemos nada. Veamos cómo podemos dibujar el mundo por pantalla. Para ello, depende de cómo estemos usando Box2D. En este caso asumimos que usamos Box2D con libGDX, aunque también se puede usar por separado. Box2D es una librería un poco interesante, porque todo está hecho para funcionar de forma lógica. Se actualizan físicas, pero al final con Box2D se obtienen coordenadas, posiciones,

para usarlas con los objetos que tengamos. Es decir, en el caso de uso normal de Box2D cuando lo integremos será hacer cálculos y darselos a los actores para que se dibujen. Como ahora no tenemos actores, necesitamos una forma de al menos ver cajitas. En Box2D o en JBox2D se hace mediante testbeds, pero aquí en libGDX no hay testbeds, sino que hay una clase completamente hecha por libGDX que se llama Box2DDebugRenderer, que sirve para dibujar un mundo

por pantalla. Lo primero que voy a crear es la instancia de Box2DDebugRenderer. Y ahora lo que voy a hacer es instanciarlo, que es fácil porque el Box2DDebugRenderer no tiene parámetros. Lo que tiene, no obstante, es un bonito método llamado dispose, del que no me voy a olvidar por llamar. Y ahora voy a pedirle al renderer que dibuje el mundo, y esto lo hacemos tras actualizad las físicas. Hacedme caso en este detalle: hay que actualizar las físicas antes de dibujarlo,

porque pueden ocurrir cosas raras si no, porque lo que el usuario ve por pantalla no se corresponde con la lógica actual del mundo, y eso puede hacer que a lo mejor parezca que el personaje haya muerto antes de poderlo ver. Siempre hay que actualizar antes de dibujar, así que llamamos antes que nada a renderer.render() para que se actualicen. Tenemos dos parámetros, uno es el World, y otro es… ¿un Matrix4? ¿De dónde lo saco? Esto es una matriz de proyección. En OpenGL

y en el mundo del 3D, porque lo tienen otras librerías, para dibujar cosas en pantalla y poder saber cómo de grandes deben verse las cosas para que quepan en pantalla, se usa una matriz de proyección, que es una cosa que le dice a la tarjeta gráfica como de grandes deben dibujarse las cosas. Esto es teórico porque es OpenGL puro así que no le voy a dedicar demasiado tiempo porque es complejo de comprender si nunca habéis oído hablar de esto,

pero necesito generar una matriz para decirle a OpenGL como de grande se debe ver todo. Y para ello hay varias opciones, una es crear un SpriteBatch como los que hemos visto, que ya trae su propia Matrix. La otra forma es crearla por nuestra cuenta. Y ahora alguno dirá ¿debo ponerme a crear matrices? A lo mejor alguno ni siquiera sabe aún usar matrices. O hay alguno que no se acuerda. No importa porque libGDX tiene una clase para hacer esto por nosotros.

Y es que en OpenGL es normal usar cámaras. No como las del mundo real, pero sí estructuras de datos con ancho, alto, zoom… y que a nuestro gusto generan matrices para usar con el render, o con otras cosas de OpenGL. Así que en primer lugar voy a crear una cámara de tipo Orthographic para usarla en un mundo 2D. Las Orthographic son proyección ortográfica por lo que nos basta para un mundo 2D. Simplemente la creo, y en el caso del constructor le debo decir el ancho y

el alto que debe tener la cámara. Por ahora voy a darle las dimensiones de la pantalla con Gdx.graphics.getWidth() y Gdx.graphics.getHeight(). Una vez lo tengamos hecho, lo que podemos hacer es decirle al render que renderice el mundo world usando la matriz de la cámara, a la que accedo con camera.combined. Un detalle más: antes de trabajar con la cámara, hay que actualizar la cámara para que pueda generar esa matriz, porque no la genera al instante.

Esto es importante si cambiamos las dimensiones de la cámara cuando hagamos el resize, pero debe generarse de algún modo. En esto consiste todo: un Renderer, una Cámara, y llamar a update. Vamos a ver cómo se dibuja el mundo, al menos para ver si esto compila y no falla. Pero… ¿alguien ha olvidado dar la luz? No, lo que pasa es que aún faltan cuerpos que representar. Así que vamos a ver cómo representar los cuerpos como actor, enemigos,

suelo… Vamos a ver cómo hacer, por ejemplo, un personaje.

Si quieres enterarte de los nuevos cursos, suscríbete. No habrá spam, prometido :)

Sobre el autor

foto de jotajotavm
José Javier Villena

jotajota pa los amigos y jota pa los de más cnfianza.

Bio Seria: Analista-Programador en diferentes lenguajes. Tutor PREMIUM de reconocidas plataformas de nivel mundial como CodigoFacilito. Redactor de artículos para Cristalab. Mi canal de YouTube está patrocinado por la editorial ANAYA y LaTostadora. Me gusta explicar con detalle y poner varios ejemplos para que no queden dudas.

Bio Molona: Me presento :) soy informatico, ni frostis d hardware pero muy muxo de programacion, friki a medias o del to segun el dia. Me gusta programar, muxo. Manejo varios lenguajes y tdo lo ke sepa lo comparto x amor al arte. Este no es mi trabjo pero lo ago mejor y con +ganas y calidad que si lo fuera, x eso mismo, xq para mi es divertido. Solo spero al menos algo de agradecimientO!! ;)

Dios, qe gusto haber escrito este parrafo cm me a dao la gana sin pensar en ortografia ni tildes ni historias!!!!!