140 lines
6.4 KiB
Markdown
140 lines
6.4 KiB
Markdown
# 怪物信息显示
|
||
|
||
<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) |