Наразі я створюю 2D RPG в C ++ 11 з Allegro 5 і збільшую.
Моя мета - якось оновити мої налаштування гри, коли параметр буде змінено в меню «Параметри». Я не хочу змушувати користувача перезапустити свою гру. Інші ігри не потребують перезавантаження при зміні роздільної здатності або переході з повноекранного режиму на віконний, тому і моя гра не повинна. Будь ласка, дивіться спрощений вигляд системи нижче.
Зауважте, що я не обов'язково хочу безпосередньо зателефонувати на свій ігровий об'єкт із екрана параметрів. Пунктирна лінія - це лише проілюструвати ефект, який я намагаюся досягти; щоб якось викликати оновлення гри при зміні опції в іншій частині системи.
Детальне пояснення
ScreenManager містить перелік усіх GameScreenіснуючих в даний час об'єктів. Це будуть різні екрани в грі, включаючи спливаючі вікна. Цей дизайн більш-менш дотримується зразка управління державними іграми в C # / XNA .
ScreenManagerМістить посилання на мій Gameоб'єкт. В Gameоб'єкт ініціалізується і змінює настройки гри. Якщо я хочу змінити роздільну здатність, перейдіть на повний екран або вимкніть гучність, я б це робив у Gameкласі.
Однак в даний час OptionsScreen не може отримати доступ до ігрового класу. Дивіться схему нижче:
GameScreen може сигналізувати три події, onFinished, onTransitionStartі onTransitionEnd. Немає, onOptionsChangedтому що це робить лише один екран. ScreenManager не може налаштувати обробку події для цього, оскільки він обробляє всі екрани як GameScreens.
Моє запитання полягає в тому, як я можу змінити дизайн, щоб зміна в OptionsMenu не вимагала перезавантаження, а була змінена негайно? Я бажаю попросити мій Gameоб’єкт оновити після натискання кнопки застосувати.


