thepoi escribió:Se me ocurre tener varios game loop de esta forma:
Sí, hay varias formas de lograr separar el juego en fases o escenas. No
hay una "mejor forma", sino "formas diferentes", aquí que cuento una
manera distinta de resolverlo, pero tendrías que evaluar si resultará
útil en tu juego:
Una forma de separar etapas en un juego es tratar de 'desacoplar' cada
una de las fases del juego en diferentes objetos. Esto hace que sea mas
sencillo añadir, modificar, e intercambiar partes del juego.
En esencia la idea sería:
- Crear un objeto por cada escena del juego: Menu, Intro, Juego, Creditos...
- Crear un objeto principal que inicialice la biblioteca, tenga el bucle
de juego y mantenga una referencia a la escena actual.
- Que el bucle de juego actualice la escena constantemente.
- Que cada escena pueda ordenar un cambio a otra escena. Por ejemplo, que Menu
pueda cambiar el juego a la escena Creditos...
Veamos un ejemplo simple en python, necesitamos un objeto principal que
administre a la escenas (Mundo), y un método para cambiar de una escena a
otra. Los objetos Menu y Juego son las escenas
- Código: Seleccionar todo
class Mundo:
def __init__(self):
# crear ventana, cargar recursos etc ...
[...]
def cambiar_escena(self, nueva_escena):
self.escena = nueva_escena
def loop(self):
while not salir:
self.escena.actualizar()
self.escena.dibujar()
flip()
class Escena:
pass
class Juego(Escena):
def update(self):
print "estoy jugando..."
class Menu(Escena):
def update(self):
print "mostrando opciones al usuario..."
# ejemplo de funcionamiento.
mundo = Mundo()
mundo.cambiar_escena(Menu())
juego = Juego()
mundo.cambiar_escena(juego)
[...]
Te recomiendo veas en detalle el mensaje que escribí hace tiempo sobre
este asunto en el foro de mensajes:
http://www.losersjuegos.com.ar/foro/viewtopic.php?t=170
Además, en el sitio de losersjuegos hay algunos juegos que hacen uso de esta
estrategia (cito unos pocos para que lo veas realizado en diferentes lenguajes):
- Irobot (en python):
http://code.google.com/p/irobotgame/
- Ceferino (en C++):
http://www.losersjuegos.com.ar/juegos/c ... ferino.php
- volleyball (en C):
http://www.losersjuegos.com.ar/juegos/v ... eyball.php
Saludos, y suerte.