Ich erstelle gerade ein 2D-RPG in C ++ 11 mit Allegro 5 und Boost.
Mein Ziel ist es, meine Spieleinstellungen irgendwie zu aktualisieren, wenn eine Option im Optionsmenü geändert wird. Ich möchte den Benutzer nicht zwingen, mein Spiel neu zu starten. Andere Spiele erfordern keinen Neustart, wenn Sie die Auflösung ändern oder vom Vollbildmodus zum Fenster wechseln. Daher sollte mein Spiel dies auch nicht tun. Nachfolgend finden Sie eine vereinfachte Ansicht des Systems.
Bitte beachten Sie, dass ich mein Spielobjekt nicht unbedingt direkt über den Optionsbildschirm aufrufen möchte. Die gestrichelte Linie soll lediglich den Effekt veranschaulichen, den ich erreichen möchte. um irgendwie ein Update des Spiels zu verursachen, wenn eine Option in einem anderen Teil des Systems geändert wird.
Ausführliche Erklärung
Der ScreenManager enthält eine Liste aller GameScreenaktuell vorhandenen Objekte. Dies sind verschiedene Bildschirme im Spiel, einschließlich Popups. Dieses Design entspricht mehr oder weniger dem Game State Management-Beispiel in C # / XNA .
Das ScreenManagerenthält einen Verweis auf mein GameObjekt. Das GameObjekt initialisiert und ändert die Spieleinstellungen. Wenn ich die Auflösung ändern, den Vollbildmodus aktivieren oder die Lautstärke stummschalten möchte, würde ich dies in der GameKlasse tun .
Der OptionsScreen kann derzeit jedoch nicht auf die Spielklasse zugreifen. Siehe unteres Diagramm:
Ein GameScreen kann drei Ereignisse signalisieren onFinished, onTransitionStartund onTransitionEnd. Es gibt keine, onOptionsChangedweil das nur ein Bildschirm tut. Der ScreenManager kann die Ereignisbehandlung dafür nicht einrichten, da er alle Bildschirme als GameScreens behandelt.
Meine Frage ist, wie kann ich mein Design so ändern, dass eine Änderung im Optionsmenü keinen Neustart erfordert, sondern sofort geändert wird? Ich würde mein GameObjekt vorzugsweise zur Aktualisierung auffordern, sobald auf die Schaltfläche "Anwenden" geklickt wird.


