跳到主要内容

菜单系统

相关源文件

目的与范围

菜单系统负责管理 Adventure-King 玩法场景中的所有模态/覆盖类 UI:包括暂停菜单、死亡界面、背包管理、以及 NPC 交互对话等。本页记录菜单组件架构、状态管理、优先级层级,以及交互流程。

通用 UI 状态管理与编排请参见 UI State Management。触发菜单动作的输入处理请参见 GameInputController。状态条与技能条等 HUD 组件请参见 HUD Elements


菜单组件概览

菜单系统由多层 UI 组成,它们可以独立显示/隐藏,并通过特定优先级规则防止界面重叠冲突。所有菜单组件由 GameUI 创建并持有,由 GameUIController 负责编排。

菜单组件Z-Order用途父级/创建位置
暂停菜单PauseMenu100暂停选项(继续、存档、读档、背包、主菜单)GameUI.cpp L127-L134
死亡菜单PlayerDeathMenu200死亡界面(重开/返回)GameUI.cpp L136-L144
背包层InventoryLayer101装备与技能管理GameUI.cpp L146-L153
祝福 NPC 层BlessingNpcLayer220用于角色升级的 NPC 交互对话GameUI.cpp L155-L163
存档菜单层SaveMenuLayerUI_Z_ORDER + 1读档时的存档槽选择界面GameUIController.cpp L147-L186

来源GameUI.cpp L127-L163

GameUIController.cpp L147-L186

GameSceneConfig.h L109-L111


菜单组件架构

这会把控制器层的逻辑(场景切换、存档管理、状态协调)注入到菜单按钮的动作中。

来源: GameUIController.cpp L32-L316


菜单状态同步

_paused 标记与 _onPauseChanged 回调用于保证系统内状态一致:

图示:各组件间暂停状态同步

任意菜单操作变更 _paused 后,_onPauseChanged 会把状态传递给 GameScene,由其负责调度器的 pause/resume。GameInputController 通过自身的 _isPaused getter 查询该状态,以在阻断玩法输入的同时允许 UI 输入。

来源: GameUIController.h L63-L78

GameInputController.cpp L47-L48

GameInputController.cpp L179-L180


关键实现细节汇总

方面实现位置
菜单创建所有菜单在 GameUI::init() 中创建,并保存为成员指针GameUI.cpp L32-L88
菜单 Z 序Death(200)> Blessing(220)> Inventory(101)> Pause(100)GameUI.cpp L127-L163
ESC 优先级Death > Inventory > Blessing > Pause toggleGameUIController.cpp L401-L445
B 键优先级Death > Blessing > Inventory toggleGameUIController.cpp L447-L481
上下文标记_inventoryReturnToPauseOnClose 控制关闭背包后的返回行为GameUIController.h L65
暂停传播_onPauseChanged 回调用于更新 GameScene 的 schedulerGameUIController.h L78
死亡恢复重开/返回前把 HP/MP 恢复至最大,避免立刻再次死亡GameUIController.cpp L249-L254
Toast 显示固定 tag(88001)防止消息重叠GameUIController.cpp L326

来源: GameUIController.cpp L1-L538

GameUI.cpp L1-L449

GameUIController.h L1-L84

GameUI.h L1-L273