Files
heros/.qoder/repowiki/zh/content/用户界面系统/怪物信息显示.md
panw 4235e3b776 refactor(game): 移除已弃用的事件常量
- 删除 UpdateHero 和 UpdateFightHero 事件
- 移除 MISSION_UPDATE 事件常量
- 优化游戏事件枚举定义
2025-10-28 16:15:47 +08:00

140 lines
6.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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