В настоящее время я создаю 2D RPG на C ++ 11 с Allegro 5 и boost.
Моя цель состоит в том, чтобы каким-то образом обновить мои игровые настройки при изменении параметра в меню параметров. Я не хочу заставлять пользователя перезагружать мою игру. Другие игры не требуют перезапуска при смене разрешения или переходе от полноэкранного к оконному, поэтому моя игра также не должна этого делать. Пожалуйста, смотрите упрощенный вид системы ниже.
Обратите внимание, что я не обязательно хочу напрямую вызывать мой объект Game с экрана настроек. Пунктирная линия просто иллюстрирует эффект, которого я пытаюсь достичь; каким-то образом вызывать обновление игры, когда опция меняется в другой части системы.
Детальное объяснение
ScreenManager содержит список всех GameScreen
существующих в данный момент объектов. Это будут различные экраны в игре, включая всплывающие окна. Этот дизайн более или менее соответствует образцу Game State Management в C # / XNA .
ScreenManager
Содержит ссылку на мой Game
объект. В Game
объект инициализируется и изменяет настройки игры. Если я хочу изменить разрешение, перейти в полноэкранный режим или отключить звук, который я сделал бы в Game
классе.
Тем не менее, в настоящее время OptionsScreen не может получить доступ к классу Game. Смотрите ниже схему:
GameScreen может сигнализировать о трех событиях onFinished
, onTransitionStart
и onTransitionEnd
. Нет, onOptionsChanged
потому что только один экран делает это. ScreenManager не может настроить обработку событий для этого, потому что он обрабатывает все экраны как GameScreen
s.
У меня вопрос, как я могу изменить свой дизайн, чтобы изменение в OptionsMenu не требовало перезапуска, а было изменено немедленно? Желательно, чтобы мой Game
объект обновлялся после нажатия кнопки «Применить».