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 GameScreen
objetos 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 ScreenManager
contiene una referencia a mi Game
objeto. El Game
objeto 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 Game
clase.
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
, onTransitionStart
y onTransitionEnd
. No hay onOptionsChanged
porque solo una pantalla hace eso. ScreenManager no puede configurar el manejo de eventos para eso porque maneja todas las pantallas como GameScreen
s.
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 Game
objeto se actualice una vez que se haga clic en el botón Aplicar.