Obecnie tworzę 2D RPG w C ++ 11 z Allegro 5 i boost.
Moim celem jest jakoś zaktualizować ustawienia gry, gdy opcja zostanie zmieniona w menu opcji. Nie chcę zmuszać użytkownika do ponownego uruchomienia gry. Inne gry nie wymagają ponownego uruchomienia podczas zmiany rozdzielczości lub przejścia z trybu pełnoekranowego do okienkowego, więc moja gra też nie powinna. Zobacz uproszczony widok systemu poniżej.
Pamiętaj, że niekoniecznie chcę bezpośrednio wywoływać mój obiekt Game z ekranu OptionsScreen. Linia przerywana ma jedynie zilustrować efekt, który próbuję osiągnąć; w jakiś sposób spowodować aktualizację gry, gdy opcja zostanie zmieniona w innej części systemu.
Szczegółowe wyjaśnienie
ScreenManager zawiera listę wszystkich istniejących GameScreen
obiektów. Będą to różne ekrany w grze, w tym wyskakujące okienka. Ten projekt jest mniej więcej zgodny z próbką Game State Management w C # / XNA .
ScreenManager
Zawiera odniesienie do mojego Game
obiektu. W Game
inicjuje obiektów i modyfikuje ustawienia gry. Jeśli chcę zmienić rozdzielczość, przejść do trybu pełnoekranowego lub wyciszyć głośność, zrobiłbym to w Game
klasie.
Jednak OptionsScreen obecnie nie ma dostępu do klasy gry. Zobacz poniższy schemat:
GameScreen może sygnalizować trzy zdarzenia onFinished
, onTransitionStart
oraz onTransitionEnd
. Nie ma, onOptionsChanged
bo robi to tylko jeden ekran. ScreenManager nie może skonfigurować obsługi zdarzeń w tym celu, ponieważ obsługuje wszystkie ekrany jako GameScreen
s.
Moje pytanie brzmi: jak mogę zmienić projekt, aby zmiana w menu Opcje nie wymagała ponownego uruchomienia, ale została natychmiast zmieniona? Wolę poprosić mój Game
obiekt o aktualizację po kliknięciu przycisku Zastosuj.