我目前正在使用Allegro 5和boost在C ++ 11中创建2D RPG。
我的目标是在“选项”菜单中更改选项后以某种方式更新我的游戏设置。我不想强迫用户重新启动我的游戏。其他游戏在更改分辨率或从全屏模式切换到全屏模式时不需要重启,因此我的游戏也不需要重启。请在下面查看系统的简化视图。
请注意,我不一定要直接从OptionsScreen调用我的Game对象。虚线仅仅是为了说明我要达到的效果。当在系统的不同部分中更改选项时,以某种方式导致游戏更新。
详细说明
ScreenManager包含GameScreen
当前存在的所有对象的列表。这些将是游戏中的各种屏幕,包括弹出窗口。该设计或多或少地遵循C#/ XNA中的游戏状态管理示例。
在ScreenManager
包含了我的参考Game
对象。该Game
对象初始化和修改游戏的设置。如果要更改分辨率,请全屏播放或静音,这是我在Game
课堂上要做的。
但是,OptionsScreen当前无法访问Game类。见下图:
GameScreen可以发信号三个事件onFinished
,onTransitionStart
和onTransitionEnd
。没有,onOptionsChanged
因为只有一个屏幕可以做到这一点。ScreenManager无法为此设置事件处理,因为它将所有屏幕都处理为GameScreen
。
我的问题是,如何更改设计以使OptionsMenu中的更改不需要重新启动,而是立即更改?我最好Game
在单击“应用”按钮后请求更新我的对象。