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