# 怪物信息显示 **本文档中引用的文件** - [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) ## 目录 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)