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.