Attualmente sto creando un gioco di ruolo 2D in C ++ 11 con Allegro 5 e boost.
Il mio obiettivo è in qualche modo aggiornare le mie impostazioni di gioco quando un'opzione viene modificata nel menu Opzioni. Non voglio forzare l'utente a riavviare il gioco. Altri giochi non richiedono un riavvio quando si cambia risoluzione o si passa da schermo intero a finestre, quindi neanche il mio gioco. Si prega di vedere una vista semplificata del sistema di seguito.
Nota che non voglio necessariamente chiamare direttamente il mio oggetto di gioco dalla schermata Opzioni. La linea tratteggiata serve semplicemente a illustrare l'effetto che sto cercando di ottenere; causare in qualche modo un aggiornamento del gioco quando un'opzione viene cambiata in una parte diversa del sistema.
Spiegazione dettagliata
ScreenManager contiene un elenco di tutti gli GameScreen
oggetti attualmente esistenti. Queste saranno varie schermate del gioco inclusi i popup. Questo design aderisce più o meno all'esempio di gestione dello stato di gioco in C # / XNA .
Il ScreenManager
contiene un riferimento al mio Game
oggetto. L' Game
oggetto inizializza e modifica le impostazioni del gioco. Se voglio cambiare la risoluzione, passare a schermo intero o disattivare il volume, lo farei in Game
classe.
Tuttavia, OptionsScreen al momento non può accedere alla classe di gioco. Vedi lo schema seguente:
Un GameScreen può segnalare tre eventi, onFinished
, onTransitionStart
e onTransitionEnd
. Non c'è onOptionsChanged
perché solo una schermata lo fa. ScreenManager non può impostare la gestione degli eventi per questo perché gestisce tutte le schermate come GameScreen
.
La mia domanda è: come posso cambiare il mio design in modo che una modifica nel menu Opzioni non richieda un riavvio, ma venga cambiata immediatamente? Preferirei che il mio Game
oggetto si aggiornasse dopo aver fatto clic sul pulsante Applica.