Programación de Juegos para Android

Programación de Juegos para Android 41: Pantalla de Carga

42 videos

238 minutos

Bien, lo último que nos queda por preparar antes de poder exportar nuestro juego es crear la pantalla que os prometí para hacer la carga de recursos. Veis que he creado Menu Screen, que es una pantalla parecida a la Game Over Screen, sólo cambia que el botón se llama Play y está colocado en otra parte. También, a Game Over Screen le he puesto un segundo botón para saltar a otro menú. Nos queda un detalle que os dije al principio. Esto de la Finish Loading

hace que se cargue de forma síncrona, es decir, detiene la ejecución del programa hasta que esté todo cargado. En su lugar mola más hacer una carga asíncrona, para decirle al usuario cómo va la cosa. Por ejemplo, decir 30% cargado o mostrar una barra de progreso si eres original. Yo quiero que el manager se cargue de forma asíncrona, para lo que he creado una pantalla, Loading Screen, que ahora mismo no hace gran cosa, muestra un mensaje en pantalla que dice Loading.

Estaría bien que ahora que dice Loading se pusiese a cargar recursos de forma asíncrona. Para ello voy a quitar este FinishLoading, y en su lugar decir que me los cargue de uno en uno. Para cargar recursos de forma asíncrona, es sencillo, todo lo que tengo que hacer es, en el render, el método que se ejecuta siempre, llamar a uno de los métodos que tiene la clase AssetManager: update(). Este método es particular, se ocupa de cargar un recurso, y devuelve verdadero cuando

todo ha terminado de ser cargado, es decir, que debo meterlo en un if para detectar cuando he terminado de cargar, porque si devuelve verdadero es que está listo, y si devuelve falso, que le quedan cosas por cargar. ¿Por qué debemos meterlo en un if? Para que si no ha terminado le mostremos el progreso de la carga y si ha terminado haremos que le lleve a la pantalla de menú, por ejemplo con game.setScreen(game.menuScreen). Si no ha terminado de cargar, lo que puedo hacer

es pedirle que me proporcione el progreso, directamente con getProgress(), que me devuelve un flotante que indica qué tal va la cosa. Así que lo que puedo hacer mismamente es coger este label que he creado que sirve para mostrar una etiqueta de texto, y actualizar su texto; progreso * 100 porque está entre 0 y 1 y lo quiero pasar a porcentaje. De este modo, cuando ahora ejecute esto, vereis que va a tardar un segundo como mucho… o ni siquiera. [Sale un error]

Oh, vale, ahora os explico por qué ha reventado. Lo que se supone que hará es ir cargando la pantalla poco a poco, recurso a recurso, y luego saltará la pantalla de juego. ¿Por qué ha reventado? Porque yo estoy pidiendo que me instancie MenuScreen cuando esto no está cargado. En el MenuScreen directamente accedo a un recurso del AssetManager que no está cargado porque no se ha mostrado aún la pantalla de carga. De mismo modo en GameScreen accedo a cosas que no se han cargado.

Debo cambiar el orden en el que se ejecuta esto. Debo mover el setScreen arriba, y le voy a hacer una estrategia que no sé si es la más correcta pero es la que yo uso, una carga en dos pasos. Primero, pongo los recursos en la cola del manager. Hago que la pantalla de carga se dispare, y cuando la pantalla de carga ha terminado, le decimos a MainGame que haga la segunda parte de la carga, con un método llamado finishLoading(). Y este segundo método se ocupa de

cargar el resto de pantallas que queda y finalmente de poner la pantalla de juego principal. Yo lo que tengo que hacer es que en LoadingScreen le digo al juego que termine de cargar los recursos. Si no ponéis recursos en load() y lo hacéis todo en show(), no tendréis este problema, pero puesto que yo instancio los recursos al crear las clases yo tengo ese problema. Voy a pasar el flotante a int para que se vea mejor, porque he visto muchos números. Ahora se queda en 0,

vamos a ver… [Teclado]. Lo voy a pasar una variable porque va a ser lo más sencillo. Debo multiplicarlo por 100, y luego lo convierto a entero para que se quiten los decimales. Me habré equivocado con un paréntesis. Lo que quiero decir es que, aunque se ve muy poco, hay un porcentaje que se está moviendo. Ahora va bien. Puedo jugar, perder, saltar al menú, volver a intentarlo… evidentemente no es el Geometry Dash, pero está muy chulo para ver cómo hacer

saltos de pantalla. Y con esto el prototipo está terminado. Este es el juego que lleváis teniendo desde el primer episodio en el repositorio que tenéis en la descripción, pero ahora os voy a enseñar como exportarlo para generar el APK que podéis enviar a vuestro teléfono móvil.

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