Como migrar mi juego al nuevo Gestor de Escenas

Antes de migrar tu juego al nuevo sistema de gestión de escenas, es mejor que le des un vistazo a Nuevo Gestor de Escenas para comprender mejor el apilamiento de escenas.

Ahora pasamos a explicar los sencillos pasos a seguir para hacer la migración de tu juego.

Iniciar el juego

Tu juego debe tener una estructura de inicio parecida a la siguiente:

import pilas
import escena_menu

pilas.iniciar(titulo='Mi titulo')

escena_menu.EscenaMenu()

pilas.ejecutar()

Lo único que deberás cambiar aquí es la línea que llama a la escena. Tendrá que quedar de la siguiente forma:

import pilas
import escena_menu

pilas.iniciar(titulo='Mi titulo')

# Esta es la línea que debemos cambiar
pilas.cambiar_escena(escena_menu.EscenaMenu())

pilas.ejecutar()

Escenas del juego

Todas las escenas de tu juego deben heredar ahora de pilas.escena.Base.

class MiEscena(pilas.escena.Base):

Y el otro cambio que debes realizar en las escenas es que el método __init__(self) no debe contener nada más que la llamada al __init__ de la escena Base

def __init__(self):
    pilas.escena.Base.__init__(self)

Luego debes definir un método iniciar(self) donde podrás crear los nuevos actores y lo necesario para iniciar tu escena.

def iniciar(self):
    pilas.fondos.Pasto()
    mono = pilas.actores.Mono()

Aquí un ejemplo de como debería ser el cambio.

Escena antigua

class MiEscena(pilas.escenas.Escena):

    def __init__(self):
        pilas.escenas.Escena.__init__(self)

        pilas.fondos.Pasto()
        mono = pilas.actores.Mono()

Escena nueva

class MiEscena(pilas.escena.Base):

    def __init__(self):
        pilas.escena.Base.__init__(self)

    def iniciar(self):
        pilas.fondos.Pasto()
        mono = pilas.actores.Mono()

Cambio de Escena

En algún punto de tu juego, llamarías a otra escena para cambiarla.

escena_juego.Escena_Juego()

Debes sustituir esta llamada a la nueva escena por esta otra forma:

pilas.cambiar_escena(escena_juego.Escena_Juego())

Eventos

Ahora los eventos son individuales por cada escena. Si quieres conectar a algún evento, como mueve_mouse, actualizar, pulsa_tecla, puedes hacerlo de cualquiera de las dos siguientes formas:

def mi_metodo(evento):
    # Hace algo

pilas.eventos.actualizar.conectar(mi_metodo())

# Otra forma de conectar
pilas.escena_actual().actualizar.conectar(mi_metodo())

Ambas formas conectan a los eventos de la escena actualmente activa.

Si deseas crear tu propio evento, lo deberás hacer de la siguiente forma:

pilas.eventos.mi_evento_personalizado = pilas.evento.Evento("mi_evento_personalizado")
pilas.eventos.mi_evento_personalizado.conectar(self._mi_evento_personalizado)

Fin de la migración

Con estos simples pasos, tu juego debe funcionar sin problemas con el nuevo sistema de gestión de escenas.

Ante cualquier problema no tengas dudas en ponerte en contacto con nosotros mediante el foro de losersjuegos.