42 videos
238 minutos
A partir de este momento nos ponemos a crear la clase del juego para poder crear el Stage. Lo voy a hacer como una nueva clase a la que voy a llamar MainGameScreen, que va a extender a BaseScreen. Por el momento sólo va a haber una pantalla pero esto es una garantía de futuro porque luego querremos tener ajustes, querremos tener opciones, porque a lo mejor no a todo el mundo le agrada este Joe, así que vamos a tener la posibilidad de poner varios joes,
o a lo mejor no a todo el mundo le gusta la música. Como vamos a tener que meter varias pantallas igualmente, cuando antes lo hagamos para corregir menos código luego, mejor. Ahora, esta clase me va a obligar a pasarle el propio juego como parámetro, así que da igual: cuando instancie este MainGameScreen le debo decir igualmente el Game al que va asociado, pero lo bueno es que a partir de este momento, digamos que yo quiero hacer una llamada a show
y quiero cargar una cosa o hacer cualquier cosa, puedo hacer game.setScreen y decirle cuál es la screen por la que vamos a cambiar el juego. Cuando pulsamos Atrás, le decimos vuelve a la screen del Menú Inicio o cuando vamos al botón Atrás de Scene2D UI le decimos ve a otra pantalla. Lo tenemos todo a nuestro gusto. Veamos cómo podemos hacer para trabajar con Scene2D. Como os hablé en la introducción, Scene2D se caracteriza por tener un escenario, un Stage,
y el Stage es el sitio en el que metemos los actores, que son cada uno de los protagonistas o de los elementos de nuestro juego. Lo primero que tenemos que hacer es crear el Stage, porque si no pocos actores vamos a poder introducir. Y el Stage es particular porque lo tenemos que dibujar, cargar… así que voy a crear directamente un Stage como un campo, porque lo voy a usar en bastantes métodos: debo eliminar sus recursos (ya sabéis que
hay un SpriteBatch por dentro), debo dibujarlo… lo más sencillo es poner “Stage = new Stage()”, para que en el hide() pueda hacer Stage.dispose(). Alguno se preguntará porque lo meto en el hide() y no en el dispose(). Eso es porque cada vez que llamo a show(), imaginemos que porque salgo del menú o me voy al menú inicio, a la de juego, vuelvo a salir… cada vez que vuelva a salir voy a instanciar un nuevo objeto de tipo Stage. Si yo simplemente hiciera
un Stage = new Stage() y el dispose() lo dejara en dispose(), si entro cuatro veces en la pantalla, se va a crear cuatro veces un stage, pero como sólo estoy creando el dispose() una vez porque sólo cierro el juego una vez, va a haber 3 stages que van a estar encerrados en memoria, por ejemplo el SpriteBatch quedará encerrado en la memoria, y no vamos a poder liberarlo. Y eso sería malgastar recursos. Entonces mal nos pese lo que tenemos que hacer es
deshacernos del Stage cuando abandonamos la pantalla, por ejemplo al volver al menú Inicio. El otro comportamiento que tenemos que hacer es dibujarlo. En el stage ahora agregaremos cada uno de los actores que van a participar en nuestro juego, por ejemplo agregaremos los pinchos, el suelo, el minijoe… cada uno de estos actores se define por independiente porque es la ventaja de Scene2D, que cada actor es independiente a los demás, pero de alguna forma debemos
decirle al Stage que coordine esto, y le diga “Stage, pide a todos los actores que se dibujen” o “Stage, pide a los actores que se actualicen”. Para ello, tenemos dos métodos relevantes en Stage; uno es draw, el que usamos para dibujar todos los actores del escenario de golpe, que está bien porque ya no tenemos que hacerlo nosotros; y el otro es act, que sirve para actualizar los actores, de modo que pensemos por ejemplo, en los pinchos, que van a estar moviéndose
hacia nosotros en la pantalla. Debemos decirle periódicamente que se muevan para que vayan avanzando hacia nosotros. Con el método act() podemos conseguir que lo haga así. Le decimos que en cada iteración del método act() se mueva un poco a la izquierda y mediante una llamada a act() se ocupa de esto. Como es poco conveniente que se nos olvide, voy a hacer la llamada a GL_CLEAR, y ya puestos voy a hacer la llamada al ClearColor, porque me va a venir muy bien
ganarme un color azul claro, para hacer el cielo y no tener que cargar esa textura. Antes que nada, vamos a probar si esto funciona realmente. No sé por qué lo pruebo porque obviamente no va a funcionar porque se me ha olvidado una cosa importante, que es presentar esta pantalla en el método create(), con un setScreen(new MainGameScreen(this)). Le paso un this porque es mi MainGame. O sea, soy yo quien creo mi pantalla. Ahora sí que debería funcionar.
Lo que habéis visto antes era una prueba que había hecho antes fuera de cámara y había olvidado poner el clear, evidentemen Se limpia de azul la pantalla porque es esto. Este stage está un poco muerto, faltan cosas. Vamos a ver cómo crear actores.
Sobre el autor
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!!!!!