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 GameScreenobiektó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 .
ScreenManagerZawiera odniesienie do mojego Gameobiektu. W Gameinicjuje 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 Gameklasie.
Jednak OptionsScreen obecnie nie ma dostępu do klasy gry. Zobacz poniższy schemat:
GameScreen może sygnalizować trzy zdarzenia onFinished, onTransitionStartoraz onTransitionEnd. Nie ma, onOptionsChangedbo robi to tylko jeden ekran. ScreenManager nie może skonfigurować obsługi zdarzeń w tym celu, ponieważ obsługuje wszystkie ekrany jako GameScreens.
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 Gameobiekt o aktualizację po kliknięciu przycisku Zastosuj.


