6.4 KiB
怪物信息显示
**本文档中引用的文件** - [MInfoComp.ts](file://assets/script/game/map/MInfoComp.ts) - [GameEvent.ts](file://assets/script/game/common/config/GameEvent.ts) - [SingletonModuleComp.ts](file://assets/script/game/common/SingletonModuleComp.ts) - [MissionComp.ts](file://assets/script/game/map/MissionComp.ts) - [VictoryComp.ts](file://assets/script/game/map/VictoryComp.ts)目录
怪物信息显示功能概述
怪物信息显示组件(MInfoComp)负责在游戏界面中动态展示当前关卡信息。该组件通过监听游戏事件系统中的关卡更新事件,实时响应游戏进度变化,并将当前关卡数据格式化为"第 X 关"的文本形式显示在UI界面上。此功能作为游戏状态可视化的重要组成部分,为玩家提供清晰的进度反馈。
Section sources
事件监听与数据更新机制
MInfoComp组件通过oops消息系统订阅GameEvent.MISSION_UPDATE事件,建立事件驱动的更新机制。当游戏中的关卡状态发生变化时,系统会广播该事件,触发MInfoComp组件的onMissionUpdate回调函数。这种事件监听模式实现了组件间的松耦合,确保UI更新仅在相关数据发生变化时才执行,提高了系统性能和响应效率。
sequenceDiagram
participant 系统 as 游戏系统
participant MInfoComp as MInfoComp组件
participant SMC as SingletonModuleComp
系统->>SMC : 更新smc.data.mission
SMC->>系统 : dispatchEvent(GameEvent.MISSION_UPDATE)
系统->>MInfoComp : onMissionUpdate回调
MInfoComp->>SMC : 获取smc.data.mission
MInfoComp->>自身 : update_mission更新UI
Diagram sources
Section sources
关卡数据获取与格式化
组件通过全局单例smc.data.mission属性获取当前关卡数据。该数据存储在SingletonModuleComp的data对象中,初始值为1,表示游戏从第一关开始。在update_mission方法中,组件将数字类型的关卡号转换为字符串,并格式化为"第 X 关"的显示格式。这种格式化处理增强了用户界面的可读性和友好性,符合中文用户的阅读习惯。
flowchart TD
A[开始] --> B{获取关卡数据}
B --> C[smc.data.mission]
C --> D[转换为字符串]
D --> E[格式化为"第 X 关"]
E --> F[更新Label组件]
F --> G[结束]
Diagram sources
Section sources
生命周期与初始化逻辑
在onLoad生命周期方法中,组件注册事件监听器并立即执行一次初始更新,确保UI在加载时显示正确的关卡信息。start方法中再次调用update_mission,形成双重保障机制,防止因事件订阅时机问题导致的显示延迟。这种设计模式确保了组件在不同加载场景下都能正确初始化,提高了代码的健壮性和可靠性。
classDiagram
class MInfoComp {
+onLoad()
+start()
+onMissionUpdate(event, data)
+update_mission(mission)
}
MInfoComp --> GameEvent : "监听"
MInfoComp --> SingletonModuleComp : "读取数据"
MInfoComp --> Label : "更新文本"
Diagram sources
Section sources
UI更新与数据流分析
组件通过节点查找机制获取名为"mission"的子节点,并获取其Label组件实例,直接更新字符串属性。这种直接的UI操作方式简洁高效,避免了不必要的中间层。数据流从全局单例smc出发,经过事件系统触发,最终更新到UI组件,形成了清晰的数据传递路径。整个过程体现了MVC模式中视图与模型分离的设计思想。
flowchart LR
A[smc.data.mission] --> B[GameEvent.MISSION_UPDATE]
B --> C[MInfoComp.onMissionUpdate]
C --> D[MInfoComp.update_mission]
D --> E[Label.string更新]
E --> F[UI显示变化]
Diagram sources
Section sources
组件交互与系统集成
MInfoComp与其他游戏组件通过事件系统协同工作。当玩家完成关卡时,VictoryComp组件会触发GameEvent.MissionEnd事件,随后新的关卡开始流程会更新smc.data.mission并广播GameEvent.MISSION_UPDATE事件。这种基于事件的通信机制使得各个功能模块能够独立开发和测试,同时保持良好的系统集成性,体现了高内聚低耦合的设计原则。
sequenceDiagram
participant VictoryComp as VictoryComp
participant MissionComp as MissionComp
participant MInfoComp as MInfoComp
VictoryComp->>MissionComp : 触发新关卡
MissionComp->>SMC : 更新关卡数据
SMC->>系统 : 广播MISSION_UPDATE
系统->>MInfoComp : 更新显示
Diagram sources
Section sources