Programación de Juegos para Android

Programación de Juegos para Android 35: Box 2D y Scene 2D parte 5

42 videos

238 minutos

Y para todo esto, lo que vamos a hacer es venirnos al PlayerEntity, y aprovechando que es un actor, vamos a sobreescribir el método act(). Aquí tenemos que hacer dos cosas: primero, iniciar un salto si hemos tocado la pantalla. Y después, hacer avanzar el jugador si está vivo. Y en cuanto a saltos, ya vimos que esto se podía hacer de una forma muy cómoda: comprobando si se acababa de tocar la pantalla, y de ser así, llamando al método jump(),

el cual podemos aprovechar aquí, como public void jump(). También, habíamos visto que jump() ya lo hice anteriormente, así que voy a copiar el código que casualmente ya tengo seleccionado, no será porque he repetido esta toma. Y lo voy a pegar en el método jump(). Pero recordad que no queremos hacer doble salto, así que antes que nada comprobaremos que no estamos saltando. Y si no estamos saltando, pues iniciamos el salto poniendo la variable a verdadera para evitar

que puedas volver a saltar. Ahora lo que queda es gestionar la colisión contra el suelo para asegurarnos que se pueda deshacer el jump y se pueda poner a falso para poder volver a saltar. Y esto es fácil: primero asociamos un userData a las entidades, y luego construir el ContactListener como hicimos previamente. Lo que hago es venir a mi World, y agregar un nuevo ContactListener. Aquí viene la parte aburrida, porque ya sabéis que esta parte siempre es compleja de escribir.

Así que voy a intentar escribir un método de apoyo para reducir la lógica a escribir. Voy a escribir un método que compruebe si han chocado en un contacto un actor con un UserData particular, a; y un actor con un UserData particular, b. Con esto, es más fácil escribir todo luego. Habrán chocado si, o bien, el Fixture de A tiene un UserData que es igual al UserData A y el Fixture B tiene un UserData que es igual al UserData B; o si el Fixture de A tiene un UserData

igual que B, y el UserData de B es A. Esto es complicado de ver así que voy a poner paréntesis. Ahora es más fácil gestionar la colisión, porque si han chocado en mi contacto mi player con mi suelo, lo que voy a hacer es decirle al Player que inicie un salto. O mejor, más que iniciar un salto, que diga que el salto ya no está activo. Cierto que me falta por crear un getter y un setter, así que dejad un segundo que los cree. Ahora sí,

lo que debería ocurrir es que cuando haga que colisionen el suelo con el Player, termine el salto. Con esto puede saltar pero no puede hacer doble ni triple salto en el aire. Sólo queda ya que pueda saltar más veces si el ratón está pulsado, así que lo que voy a hacer es que si el dedo sigue en la pantalla, se le diga al Player que debe saltar otra vez. Recordemos, tal como vimos anteriormente, que no podemos poner una fuerza en medio del Contact porque el mundo

está procesando. Debo crear una variable llamada mustJump, y hacer que salte fuera, creando un getter y un setter y haciendo que si la colisión se produce, se ponga el mustJump a false, y se sigue saltando. De este modo, ahora podemos hacer que cuando se mantenga pulsado el dedo, se pueda seguir saltando. Todo lo que queda es ajustar la velocidad al Joe, ahora que está vivo. Así que lo que hago por último es que, si está vivo, se aplique un nuevo salto.

Voy a renombrar la variable como speedY, para hacerlo más inglés todo. Y ahora lo que queda es hacer que dejes de estar vivo cuando choques. Voy a usar una colisión nueva, que detecte si ha chocado un Player con un Spike para que el player deje de estar vivo. Y ahora debería moverse mientras esté vivo, y cuando se choque, debería dejar de moverse. Esta inercia la podemos aprovechar para mostrar un mensaje en pantalla que diga “¡has perdido, ha!”.

Con esto queda portado todo lo que habíamos hecho previamente con Box2D a lo que habíamos hecho antes en Scene2D. ¿Puede seguir saltando estando muerto? Eso no me interesa, la verdad. Voy a hacer que sólo saltes si no estás muerto, porque si no como que no. Con esto hemos terminado de portar el juego de Box2D a Scene2D para que podamos hacerlo. Vamos a mejorar el juego ahora que lo tenemos terminado.

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