Programación de Juegos para Android

Programación de Juegos para Android 25: Cómo crear el suelo

42 videos

238 minutos

Vamos a ver ahora cómo crear ese suelo. Hemos visto cómo crear un cuerpo y una fixture, así que no debería ser ninguna novedad por ahora. Creo un sueloBody y… ¿por qué está la variable gris? Porque se me ha olvidado seguro hacer un dispose. Os lo digo ahora: para hacer un dispose de una fixture, tenéis que llamar al Body, y al igual que con World, tendréis un método llamado destroy para destruir una fixture. Se me ha olvidado, tendría que

haberlo dicho antes. Creo la fixture del suelo, y ya que estoy aquí voy a probar a quitar esto y meterlo aquí. Para crear la fixture y el body del suelo hago lo mismo. createBody, createSueloBodyDef… ya sé que el Spanglish no es lo mejor, pero bueno. Crearemos la definición de suelo, que es parecida a la del body de Joe, pero ahora vamos a crear un StaticBody. Por defecto los cuerpos son estáticos salvo que lo cambiemos así que es fácil. Vamos a

darle una posición, y la posición que le voy a dar es 0, -1. Ahora os explicaré por qué ese -1. Finalmente voy a crear la fixture ahora que lo tenemos. Creo un PolygonShape, como en el otro caso. Le quiero dar una forma rectangular y larga para que quepa a lo largo de todo el nivel, y corta de alto para que no ocupe demasiado sitio vertical. Por ejemplo, le voy a dar como tamaño 1 kilómetro de ancho, y 2 metros de alto. La cámara va a tener zoom para que no se vea

que debajo del suelo no hay nada. Pero, no basta con poner 1000 y 2, porque os he engañado antes: no le pasamos aquí el alto, sino que le pasamos el medio alto y el medio ancho. Es decir, que todo esto se multiplicará por 2. ¿Por qué ocurre esto? Volvamos al Skitch y os lo dibujo. Cuando creamos un Body, supongamos circular o rectangular en este caso, y le damos una posición, la posición que le damos define el centro de gravedad que tendremos aquí.

Así que si hacemos body.position.set, definimos dónde se coloca el punto. Y al darle las dimensiones medimos dónde se colocan las dimensiones de esto y esto. Pero con (1,1), querrá decir que medio ancho es 1 y medio alto es 1, así que en total la altura va a ser w=2, h=2. Ya he cambiado el setAsBox de Minijoe a 0.5 porque si no crearíamos un personaje de 2 metros de ancho y alto. Así que si quiero crear un suelo de 1 km le tengo que dar en realidad 500 metros,

y para darle 2 metros de altura, le debo dar un 1. Ahora tiene sentido por qué el suelo está en -1. Si ese punto define el centro, ahora el borde superior del suelo quede en 0, y eso va a venir bien porque el body de Joe y todo lo demás, podrá estar en torno a y=0, y quedará bien. En este caso, todo lo que queda es asociar la fixture con el Body. No olvidéis usar el body correcto. Creo el shape, la densidad… Recordad que hay que hacer un dispose para no usar más la Shape

porque no la necesitaremos más. Ahora, si lo ejecuto, veréis que aparece este suelo, y que cuando lo toca, deja de caer. Os habréis fijado que en el momento en el que cae tiene un color distinta la caja que cuando está en el suelo. A ver si… ¿veis que es rosa, y de repente se vuelve gris? Eso es porque Box2D detecta que está en reposo, y ya no tiene que actualizar más ese cuerpo. ¿Recordáis que al crear el World le dijimos que doSleep fuese True? He ahí la consecuencia.

Si Box2D detecta que está en reposo, ya no tiene que actuar sobre él ninguna fuerza, así que deja de actuar sobre él. En el caso de los StaticBody, como no se tiene que procesar ninguna fuerza, ni siquiera cambiar de color, y de hecho tiene otro color, verde, para indicar que es un cuerpo sobre el que no afectan fuerzas. Pero a pesar de que no tenga fuerzas, sigue interactuando en acciones. De hecho todas las colisiones generan un evento que podremos tratar

para obtener cosas como saltos o colisiones con enemigos. Ahora lo único que queda es arreglar la cámara, porque como veis está un poco lejos. Estaría bien que ahora que lo tenemos a nuestro gusto se hiciese un poco de zoom para que no quede mal. Así que lo que haremos es, por último, darle las dimensiones que tenía que tener. Como vais a ver ahora, no se va a ver bien, así que debo hacer una operación de tipo translate, porque el suelo

está demasiado arriba. Voy a bajarlo un poco con el método translate, que no tiene que ver con la traducción al español, lo que hace es mover la cámara para mover el suelo abajo. De este modo ya no se va a ver tanto el suelo, como lo que tiene a su alrededor. Y esto ya va tomando forma de Geometry Dash… digo Jump Don’t Die, ¿qué es eso de Geometry Dash? Evidentemente el Minijoe debe estar a la izquierda para que no parezca que el escenario se nos eche encima,

pero esto es práctico.

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