Actualmente estoy creando un RPG 2D en C ++ 11 con Allegro 5 y boost.
Mi objetivo es actualizar de alguna manera la configuración de mi juego cuando se cambia una opción en el Menú de opciones. No quiero obligar al usuario a reiniciar mi juego. Otros juegos no requieren reinicio al cambiar la resolución o pasar de pantalla completa a ventana, por lo que mi juego tampoco debería. Vea una vista simplificada del sistema a continuación.
Tenga en cuenta que no necesariamente quiero llamar directamente a mi objeto Juego desde la pantalla Opciones. La línea punteada es simplemente para ilustrar el efecto que estoy tratando de lograr; causar de alguna manera una actualización del juego cuando se cambia una opción en una parte diferente del sistema.
Explicación detallada
ScreenManager contiene una lista de todos los GameScreenobjetos que existen actualmente. Estas serán varias pantallas en el juego, incluidas ventanas emergentes. Este diseño se adhiere más o menos a la muestra de Game State Management en C # / XNA .
El ScreenManagercontiene una referencia a mi Gameobjeto. El Gameobjeto inicializa y modifica la configuración del juego. Si quiero cambiar la resolución, ir a pantalla completa o silenciar el volumen, lo haría en la Gameclase.
Sin embargo, la pantalla OptionsScreen actualmente no puede acceder a la clase Game. Vea el diagrama a continuación:
Un GameScreen puede señalar tres eventos onFinished, onTransitionStarty onTransitionEnd. No hay onOptionsChangedporque solo una pantalla hace eso. ScreenManager no puede configurar el manejo de eventos para eso porque maneja todas las pantallas como GameScreens.
Mi pregunta es, ¿cómo puedo cambiar mi diseño para que un cambio en el menú Opciones no requiera un reinicio, sino que se cambie de inmediato? Preferiblemente solicitaría que mi Gameobjeto se actualice una vez que se haga clic en el botón Aplicar.


