Tutorial MonoGame – Screen Manager

Tutorial MonoGame – Screen Manager

Es hora de empezar a crear nuestro videojuego y escribir código :). Lo primero que vamos a hacer es crear un screen manager para manejar todas las pantallas. Por ejemplo, tendremos una pantalla Splash, una pantalla de inicio, una pantalla de juego y una de game over.

Lo primero que vamos a hacer es crear una nueva clase llamada Screen.cs , esta clase nos servirá como base para las demás pantallas que van a heredad de esta. Crea primero una carpeta llamada Screens y dentro de ésta crea un archivo llamada Screen.cs. En ese archivo escribe lo siguiente

Como ves, es solo una colección de métodos virtuales que vamos a tener que sobre escribir.

Ahora que ya tenemos nuestra clase Screen base, vamos a crear una nueva clase que nos servirá para manejar todas las pantallas de nuestro juego. Crea una carpeta llamada Managers, ya que vamos a crear otros managers, dentro de esa carpeta crea un archivo llamado ScreenManager.cs y escribe lo siguiente.

Vamos a explicar un poco lo que está haciendo esta clase.

Lo primero que necesitamos son unas variables para tener el estado de las pantallas, tanto como si la pantalla se está removiendo, si se está agregando o si se está reemplazando. Obviamente necesitaremos una forma de guardar todas estas pantallas, para eso vamos a usar un Stack, ya que vamos a representar a las pantallas como si se fuera agregando a una pila en donde necesitaremos siempre de la última pantalla que se agrega.

Luego tenemos el método AddScreen  que lo que hace es cambiar el estado del manager, aquí ponemos que se está agregando una nueva pantalla, vemos si está reemplazando a otra o es nueva y agregamos esa pantalla que se está agregando a nuestra variable newScreen . En esta parte realmente no hacemos cambios en el stack, solamente estamos manejando estados.

Como el caso anterior RemoveScreen solo nos cambia el estado de la variable isRemoving a verdadero, ya que estamos removiendo la pantalla.

En donde se hacen todos los cambios es realmente en el método ProcessScreenChanges  ya que aquí checamos is se está removiendo la pantalla y si el stack no está vacío. Si es así, entonces eliminamos la primera pantalla del Stack y si hay una pantalla anterior entonces está se reanuda y como terminamos de eliminar la pantalla, ponemos de nuevo la variable en falso.

Ahora vemos si la pantalla se está agregando, de ser así, si está reemplazando a otra entonces sacamos la última pantalla del stack, si no (por ejemplo, que sea un menú) ponemos la última pantalla en pausa mientras agregamos la nueva pantalla.

Por último tenemos el método GetActiveState  que lo que hace es devolver la pantalla arriba del stack que es la que está realmente activa.

Corre el proyecto de MonoGame para comprobar que no haya errores en el código, te debería salir la misma pantalla que vimos anteriormente.

Por ahora ya tenemos nuestro Screen Manager, en el siguiente tutorial vamos a crear un InputManager para manejar todas las operaciones que haremos en nuestro juego.