Programación de Juegos para Android

Programación de Juegos para Android 22: Body y BodyDef

42 videos

238 minutos

Vamos a ver cómo crear un personaje en Box2D. Nuestro MiniJoe. Para crear objetos en Box2D necesitamos, primero crear un body, y luego necesitamos crear un fixture. La documentación habla en profundidad de un montón de cosas: qué es un body. Un body es un objeto que representa una entidad del mundo. Tienen velocidad, posición… pero carecen de forma, la cual se define por un fixture, que es lo segundo que necesitamos. Un fixture le da la forma que queremos que tenga,

según dice la documentación. No es que me esté inventando nada. Pero sí, para representar un personaje como al minijoe necesitamos crear, por un lado un Body del Minijoe, y la Fixture del Minijoe. Como veis lo estoy dejando en esta clase. Pero si me pongo a hacer esto con cada uno de los actores que tengo en el sistema, esto va a acabar con 40.000 bodies, así que ya veremos que lo normal es embutirlo en una estructura de datos como una Entidad. Por ahora voy a dejarlo aquí

porque para explicar esto sirve. ¿Cómo creamos un Body? No es tan facil como hacer new Body. En su lugar, hay que usar el método createBody de la clase World, para asociarlo al mundo. Necesitamos una cosa más: crear el BodyDef. Porque el Body tiene muchas propiedades como posición, velocidad, tipo… pero alguien debe conocer esto, y BodyDef es la clase que le dice a libGDX qué forma tiene el cuerpo. Primero, voy a crear un BodyDef, como minijoeDef. Para no llenarlo de código,

voy a hacer mejor una función llamada createJoeBodyDef. Se quejará de que no existe, así que no importa, la creamos, que para eso los IDE son tan rápidos y potentes. Vamos a crear un BodyDef, y para ello tengo una serie de parámetros que rellenar. No todos, algunos tienen valores por defecto, pero habrá que dar posición. Como puede ser la (0, 10), para que esté más arriba. Debo llamar al método set, porque el Vector de BodyDef es final,

así que no puedo sustituirlo por otro Vector2, sino que hay que usar el método set. Lo segundo que voy a hacer es decirle qué tipo de objeto es, porque en Box2D tenemos varios tipos de Body. Tenemos el DynamicBody, el StaticBody y el KinematicBody. Ya veremos los tres, pero por ahora, StaticBody es el que usamos para cuerpos que no se van a mover, como suelos, enemigos, cosas que no se deben mover. Por ahora nos interesa DynamicBody, porque se puede mover:

puede tener velocidad, tener fuerzas… evidentemente el personaje se va a mover, así que vamos a usar fuerzas dinámicas. Una vez que lo tengamos hecho le hacemos un return. Y con la definición del cuerpo creada, creamos el auténtico Minijoe, con esa definición. Dicho sea de paso, BodyDef no tiene capacidad para disposearse, porque es una estructura de datos básica. Desaparece al acabar el método show(). Pero Body sí debe disposearse. Lo único, no tiene método dispose(),

sino que hay que pedirle al mundo que destruya el Body. Con eso se disposea, se elimina y todo eso, pero no se puede hacer con una llamada. El problema de esto es que no le da forma, porque le falta la Fixture. Es decir, si intento ejecutar esto seguiremos sin ver nada, porque queda por crear la Fixture para que podamos visualizar el cuerpo.

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!!!!!