refactor(game): 移除已弃用的事件常量

- 删除 UpdateHero 和 UpdateFightHero 事件
- 移除 MISSION_UPDATE 事件常量
- 优化游戏事件枚举定义
This commit is contained in:
panw
2025-10-28 16:15:47 +08:00
parent b765e6a7a6
commit 4235e3b776
74 changed files with 31775 additions and 3 deletions

View File

@@ -0,0 +1,363 @@
# MissionComp事件处理机制
<cite>
**本文档中引用的文件**
- [MissionComp.ts](file://assets/script/game/map/MissionComp.ts)
- [GameEvent.ts](file://assets/script/game/common/config/GameEvent.ts)
- [VictoryComp.ts](file://assets/script/game/map/VictoryComp.ts)
- [HeroViewComp.ts](file://assets/script/game/hero/HeroViewComp.ts)
- [MissionMonComp.ts](file://assets/script/game/map/MissionMonComp.ts)
- [AtkConCom.ts](file://assets/script/game/skill/AtkConCom.ts)
- [SkillViewCom.ts](file://assets/script/game/skill/SkillViewCom.ts)
</cite>
## 目录
1. [简介](#简介)
2. [项目结构概览](#项目结构概览)
3. [核心组件分析](#核心组件分析)
4. [架构概览](#架构概览)
5. [详细组件分析](#详细组件分析)
6. [事件处理流程](#事件处理流程)
7. [性能考虑](#性能考虑)
8. [故障排除指南](#故障排除指南)
9. [结论](#结论)
## 简介
MissionComp.ts是游戏战斗系统的核心控制器负责管理整个任务生命周期中的事件监听、处理和游戏状态管理。该组件通过事件驱动的方式协调各个子系统的运作包括战斗准备、怪物生成、英雄死亡检测、战斗结束处理等功能。
## 项目结构概览
```mermaid
graph TB
subgraph "游戏地图模块"
MissionComp[MissionComp<br/>任务控制器]
MissionMonComp[MissionMonComp<br/>怪物控制器]
VictoryComp[VictoryComp<br/>胜利界面]
end
subgraph "英雄系统"
HeroViewComp[HeroViewComp<br/>英雄视图组件]
HeroConComp[HeroConComp<br/>英雄控制组件]
end
subgraph "技能系统"
AtkConCom[AtkConCom<br/>攻击控制组件]
SkillViewCom[SkillViewCom<br/>技能视图组件]
end
subgraph "事件系统"
GameEvent[GameEvent<br/>事件枚举]
MessageCenter[消息中心]
end
MissionComp --> GameEvent
MissionComp --> MessageCenter
MissionMonComp --> GameEvent
HeroViewComp --> GameEvent
AtkConCom --> GameEvent
MessageCenter --> MissionComp
MessageCenter --> MissionMonComp
MessageCenter --> HeroViewComp
MessageCenter --> VictoryComp
```
**图表来源**
- [MissionComp.ts](file://assets/script/game/map/MissionComp.ts#L1-L151)
- [GameEvent.ts](file://assets/script/game/common/config/GameEvent.ts#L1-L70)
## 核心组件分析
MissionComp作为游戏战斗系统的核心控制器主要负责以下功能
### 主要职责
- **事件监听管理**:注册并处理各种游戏事件
- **战斗状态控制**:管理战斗开始、进行、结束的状态转换
- **资源清理**:战斗结束后清理游戏实体和组件
- **数据初始化**:每局游戏开始时初始化相关数据
### 关键属性
- `rewards`:掉落物品奖励数组
- `game_data`:游戏统计数据(经验、金币、钻石)
- `node`Cocos节点引用
**章节来源**
- [MissionComp.ts](file://assets/script/game/map/MissionComp.ts#L15-L30)
## 架构概览
```mermaid
sequenceDiagram
participant Player as 玩家
participant MissionComp as MissionComp
participant MissionMonComp as MissionMonComp
participant HeroViewComp as HeroViewComp
participant VictoryComp as VictoryComp
participant ECS as ECS系统
Player->>MissionComp : 启动任务
MissionComp->>MissionComp : data_init()
MissionComp->>MissionComp : mission_start()
MissionComp->>MissionMonComp : GameEvent.FightReady
MissionMonComp->>MissionMonComp : 刷怪
MissionComp->>MissionComp : to_fight()
MissionComp->>MissionComp : GameEvent.FightStart
loop 战斗进行中
HeroViewComp->>MissionComp : GameEvent.HeroDead
MissionComp->>MissionComp : do_hero_dead()
HeroViewComp->>MissionComp : GameEvent.MonDead
MissionComp->>MissionComp : do_mon_dead()
end
MissionComp->>MissionComp : fight_end()
MissionComp->>ECS : cleanComponents()
MissionComp->>VictoryComp : 打开胜利界面
```
**图表来源**
- [MissionComp.ts](file://assets/script/game/map/MissionComp.ts#L66-L151)
- [MissionMonComp.ts](file://assets/script/game/map/MissionMonComp.ts#L34-L80)
## 详细组件分析
### onLoad方法中的事件注册
MissionComp在onLoad方法中注册了多个关键事件监听器
```mermaid
classDiagram
class MissionComp {
+onLoad() void
+do_mon_dead(event, data) void
+do_hero_dead(event, data) void
+fight_end() void
+mission_start() Promise~void~
+data_init() void
-cleanComponents() void
}
class GameEvent {
<<enumeration>>
MissionStart
FightEnd
HeroDead
MonDead
FightReady
FightStart
MissionEnd
}
MissionComp --> GameEvent : 监听事件
```
**图表来源**
- [MissionComp.ts](file://assets/script/game/map/MissionComp.ts#L25-L32)
- [GameEvent.ts](file://assets/script/game/common/config/GameEvent.ts#L10-L60)
#### 事件监听器详解
1. **MissionStart事件**:任务开始事件
- 触发时机:任务初始化时
- 处理逻辑发送FightReady事件激活节点初始化数据
2. **MonDead事件**:怪物死亡事件
- 触发时机:怪物被击败时
- 处理逻辑:减少怪物计数
3. **HeroDead事件**:英雄死亡事件
- 触发时机:英雄生命值归零时
- 处理逻辑:减少英雄计数,判断游戏失败
4. **FightEnd事件**:战斗结束事件
- 触发时机:战斗结束时
- 处理逻辑:延迟清理游戏实体
5. **MissionEnd事件**:任务结束事件
- 触发时机:任务完成或失败时
- 处理逻辑:隐藏任务节点
**章节来源**
- [MissionComp.ts](file://assets/script/game/map/MissionComp.ts#L25-L32)
### fight_end方法的延迟清理机制
fight_end方法实现了战斗结束后的延迟清理逻辑
```mermaid
flowchart TD
Start([战斗结束]) --> Delay["延迟0.5秒"]
Delay --> StopGame["停止游戏播放<br/>smc.mission.play=false"]
StopGame --> StopPause["停止暂停<br/>smc.mission.pause=false"]
StopPause --> CleanComponents["调用cleanComponents()"]
CleanComponents --> QueryHeroes["查询所有HeroViewComp组件"]
QueryHeroes --> RemoveHero["移除HeroViewComp组件"]
RemoveHero --> DestroyHero["销毁英雄实体"]
DestroyHero --> QueryAtk["查询所有AtkConCom组件"]
QueryAtk --> RemoveAtk["移除AtkConCom组件"]
RemoveAtk --> DestroyAtk["销毁攻击实体"]
DestroyAtk --> QuerySkill["查询所有SkillViewCom组件"]
QuerySkill --> RemoveSkill["移除SkillViewCom组件"]
RemoveSkill --> DestroySkill["销毁技能实体"]
DestroySkill --> End([清理完成])
```
**图表来源**
- [MissionComp.ts](file://assets/script/game/map/MissionComp.ts#L108-L116)
#### cleanComponents方法实现细节
cleanComponents方法通过ECS查询系统清理不同类型的游戏实体
- **英雄实体清理**查询所有带有HeroViewComp组件的实体
- **攻击实体清理**查询所有带有AtkConCom组件的实体
- **技能实体清理**查询所有带有SkillViewCom组件的实体
**章节来源**
- [MissionComp.ts](file://assets/script/game/map/MissionComp.ts#L125-L130)
### do_hero_dead方法的游戏失败判定
do_hero_dead方法实现了英雄死亡时的游戏失败判定逻辑
```mermaid
flowchart TD
HeroDead[英雄死亡事件] --> ReduceCount["减少英雄计数<br/>smc.vmdata.mission_data.hero_num--"]
ReduceCount --> CheckCount{"英雄计数 <= 0?"}
CheckCount --> |否| Continue[继续战斗]
CheckCount --> |是| DispatchEnd["分发FightEnd事件<br/>GameEvent.FightEnd"]
DispatchEnd --> OpenVictory["打开胜利界面<br/>UIID.Victory"]
OpenVictory --> SetParams["设置参数:<br/>victory=false<br/>rewards=this.rewards<br/>game_data=this.game_data"]
SetParams --> End[游戏失败]
```
**图表来源**
- [MissionComp.ts](file://assets/script/game/map/MissionComp.ts#L54-L62)
当所有英雄都死亡时,系统会:
1. 分发FightEnd事件携带victory=false参数
2. 打开Victory界面显示失败状态
3. 传递奖励数组和游戏统计数据
**章节来源**
- [MissionComp.ts](file://assets/script/game/map/MissionComp.ts#L54-L62)
### data_init方法的数据初始化过程
data_init方法负责每局游戏开始时的初始化工作
```mermaid
flowchart TD
Start([开始初始化]) --> SetPlay["设置游戏状态<br/>smc.mission.play = true"]
SetPlay --> SetFight["设置战斗状态<br/>smc.vmdata.mission_data.in_fight=false"]
SetFight --> SetTime["设置战斗时间<br/>smc.vmdata.mission_data.fight_time=0"]
SetTime --> SetLevel["设置关卡<br/>smc.vmdata.mission_data.level=0"]
SetLevel --> InitRewards["初始化奖励数组<br/>this.rewards=[]"]
InitRewards --> Log["记录初始化日志"]
Log --> End([初始化完成])
```
**图表来源**
- [MissionComp.ts](file://assets/script/game/map/MissionComp.ts#L118-L124)
**章节来源**
- [MissionComp.ts](file://assets/script/game/map/MissionComp.ts#L118-L124)
## 事件处理流程
### 完整的事件派发与监听流程
以下是游戏战斗系统中典型的事件处理流程:
```mermaid
sequenceDiagram
participant UI as 用户界面
participant MissionComp as MissionComp
participant MessageCenter as 消息中心
participant MissionMonComp as MissionMonComp
participant HeroViewComp as HeroViewComp
participant ECS as ECS系统
UI->>MissionComp : 点击开始战斗
MissionComp->>MessageCenter : GameEvent.MissionStart
MessageCenter->>MissionComp : 接收事件
MissionComp->>MessageCenter : GameEvent.FightReady
MessageCenter->>MissionMonComp : 接收事件
MissionMonComp->>MissionMonComp : 刷怪逻辑
MissionMonComp->>MessageCenter : GameEvent.FightStart
MessageCenter->>MissionComp : 接收事件
loop 战斗过程中
HeroViewComp->>MessageCenter : GameEvent.MonDead
MessageCenter->>MissionComp : 接收事件
MissionComp->>MissionComp : do_mon_dead()
HeroViewComp->>MessageCenter : GameEvent.HeroDead
MessageCenter->>MissionComp : 接收事件
MissionComp->>MissionComp : do_hero_dead()
alt 英雄全部死亡
MissionComp->>MessageCenter : GameEvent.FightEnd
MissionComp->>UI : 打开胜利界面
end
end
MissionComp->>MessageCenter : GameEvent.FightEnd
MessageCenter->>MissionComp : 接收事件
MissionComp->>MissionComp : fight_end()
MissionComp->>ECS : cleanComponents()
```
**图表来源**
- [MissionComp.ts](file://assets/script/game/map/MissionComp.ts#L66-L151)
- [MissionMonComp.ts](file://assets/script/game/map/MissionMonComp.ts#L34-L80)
### 参数传递机制
事件系统采用参数化设计,支持不同类型的参数传递:
| 事件类型 | 参数结构 | 用途 |
|---------|---------|------|
| GameEvent.FightEnd | `{victory: boolean}` | 标识战斗结果 |
| GameEvent.MissionStart | 无参数 | 启动新任务 |
| GameEvent.MonDead | `data: {monsterId: number}` | 怪物死亡信息 |
| GameEvent.HeroDead | `data: {heroId: number}` | 英雄死亡信息 |
**章节来源**
- [MissionComp.ts](file://assets/script/game/map/MissionComp.ts#L54-L62)
- [MissionComp.ts](file://assets/script/game/map/MissionComp.ts#L48-L52)
## 性能考虑
### 事件监听器优化
1. **事件去重**:确保相同事件不会重复注册
2. **内存管理**:及时清理不再使用的事件监听器
3. **异步处理**:战斗结束清理采用延迟执行避免阻塞
### ECS组件清理策略
cleanComponents方法采用批量查询和清理策略
- 使用ECS查询系统高效定位目标组件
- 批量移除和销毁相关实体
- 避免逐个遍历导致的性能问题
## 故障排除指南
### 常见问题及解决方案
#### 1. 事件未正确触发
**症状**:某些事件监听器没有响应
**原因**:事件名称拼写错误或事件未正确注册
**解决**检查GameEvent枚举定义和事件监听器注册
#### 2. 战斗结束后残留实体
**症状**:战斗结束后仍有未清理的游戏实体
**原因**cleanComponents方法未能匹配到所有组件
**解决**:检查组件标签是否正确,确保所有实体都包含相应组件
#### 3. 英雄死亡判定错误
**症状**:英雄死亡后游戏未正确判定失败
**原因**do_hero_dead方法逻辑错误或事件传递中断
**解决**:验证英雄计数逻辑和事件分发机制
**章节来源**
- [MissionComp.ts](file://assets/script/game/map/MissionComp.ts#L54-L62)
- [MissionComp.ts](file://assets/script/game/map/MissionComp.ts#L125-L130)
## 结论
MissionComp.ts作为游戏战斗系统的核心控制器通过精心设计的事件驱动架构实现了高效的战斗管理。其主要优势包括
1. **模块化设计**:清晰的职责分离,便于维护和扩展
2. **事件驱动**:松耦合的组件通信机制
3. **资源管理**:完善的清理机制确保内存安全
4. **状态控制**:精确的游戏状态管理
该设计模式为游戏开发提供了可复用的战斗系统框架,能够适应不同类型的战斗场景需求。通过合理的事件管理和组件清理,确保了游戏运行的稳定性和性能表现。

View File

@@ -0,0 +1,380 @@
# 基地组件状态同步
<cite>
**本文档引用的文件**
- [MissionHomeComp.ts](file://assets/script/game/map/MissionHomeComp.ts)
- [MissionComp.ts](file://assets/script/game/map/MissionComp.ts)
- [GameEvent.ts](file://assets/script/game/common/config/GameEvent.ts)
- [SingletonModuleComp.ts](file://assets/script/game/common/SingletonModuleComp.ts)
- [CardController.ts](file://assets/script/game/map/CardController.ts)
</cite>
## 目录
1. [简介](#简介)
2. [项目结构概览](#项目结构概览)
3. [核心组件分析](#核心组件分析)
4. [架构设计](#架构设计)
5. [详细组件分析](#详细组件分析)
6. [事件驱动机制](#事件驱动机制)
7. [微信小游戏适配](#微信小游戏适配)
8. [组件间协作流程](#组件间协作流程)
9. [性能考虑](#性能考虑)
10. [总结](#总结)
## 简介
MissionHomeComp是游戏中的基地状态视图控制器负责管理基地界面的状态切换和UI更新。该组件在MissionEnd事件触发时激活基地节点并通过home_active方法完成界面状态的恢复。同时它还提供了微信小游戏环境检测、按钮交互接口预留等功能确保游戏能够在不同平台环境下正常运行。
## 项目结构概览
```mermaid
graph TB
subgraph "游戏地图模块"
MissionHomeComp["MissionHomeComp<br/>基地视图控制器"]
MissionComp["MissionComp<br/>任务控制器"]
CardController["CardController<br/>卡片控制器"]
end
subgraph "事件系统"
GameEvent["GameEvent<br/>游戏事件定义"]
EventDispatcher["事件分发器"]
end
subgraph "单例模块"
SingletonModule["SingletonModuleComp<br/>全局状态管理"]
end
MissionHomeComp --> GameEvent
MissionComp --> GameEvent
MissionHomeComp --> SingletonModule
MissionComp --> SingletonModule
CardController --> MissionHomeComp
EventDispatcher --> MissionHomeComp
EventDispatcher --> MissionComp
```
**图表来源**
- [MissionHomeComp.ts](file://assets/script/game/map/MissionHomeComp.ts#L1-L53)
- [MissionComp.ts](file://assets/script/game/map/MissionComp.ts#L1-L151)
- [GameEvent.ts](file://assets/script/game/common/config/GameEvent.ts#L1-L70)
## 核心组件分析
### MissionHomeComp组件特性
MissionHomeComp继承自CCComp基类采用ECS架构模式具有以下核心特性
- **事件监听机制**通过on方法监听MissionEnd事件
- **状态管理**提供home_active方法管理基地界面状态
- **环境适配**包含isWxClient方法检测微信环境
- **扩展接口**预留btn_func方法用于按钮交互扩展
### MissionComp组件职责
MissionComp负责整个战斗流程的控制包括
- 战斗开始、结束的生命周期管理
- 英雄死亡、怪物死亡的事件处理
- 奖励发放和数据初始化
- 组件清理和资源回收
**章节来源**
- [MissionHomeComp.ts](file://assets/script/game/map/MissionHomeComp.ts#L11-L53)
- [MissionComp.ts](file://assets/script/game/map/MissionComp.ts#L17-L151)
## 架构设计
```mermaid
classDiagram
class MissionHomeComp {
+onLoad() void
+start() void
+mission_end() void
+home_active() void
+uodate_data() void
+isWxClient() boolean
+btn_func(e, data) void
+reset() void
}
class MissionComp {
+onLoad() void
+update(dt) void
+mission_start() void
+mission_end() void
+fight_end() void
+do_mon_dead(event, data) void
+do_hero_dead(event, data) void
+cleanComponents() void
+reset() void
}
class SingletonModuleComp {
+mission object
+vmdata object
+isWxClient() boolean
+updateGold(gold) boolean
+addHero(hero_uuid) boolean
}
class GameEvent {
<<enumeration>>
MissionEnd
FightEnd
MissionStart
HeroDead
MonDead
}
MissionHomeComp --> GameEvent : 监听
MissionComp --> GameEvent : 触发
MissionHomeComp --> SingletonModuleComp : 使用
MissionComp --> SingletonModuleComp : 使用
```
**图表来源**
- [MissionHomeComp.ts](file://assets/script/game/map/MissionHomeComp.ts#L13-L53)
- [MissionComp.ts](file://assets/script/game/map/MissionComp.ts#L17-L151)
- [SingletonModuleComp.ts](file://assets/script/game/common/SingletonModuleComp.ts#L25-L195)
## 详细组件分析
### MissionHomeComp核心方法解析
#### mission_end方法 - 事件响应入口
当MissionEnd事件触发时mission_end方法被调用这是基地状态恢复的关键入口点。
```mermaid
sequenceDiagram
participant MissionComp as "MissionComp"
participant GameEvent as "GameEvent"
participant MissionHomeComp as "MissionHomeComp"
participant UI as "UI界面"
MissionComp->>GameEvent : 触发MissionEnd事件
GameEvent->>MissionHomeComp : 分发事件到mission_end
MissionHomeComp->>MissionHomeComp : 调用home_active()
MissionHomeComp->>MissionHomeComp : 调用uodate_data()
MissionHomeComp->>UI : 设置node.active=true
UI-->>MissionHomeComp : 界面激活完成
```
**图表来源**
- [MissionHomeComp.ts](file://assets/script/game/map/MissionHomeComp.ts#L26-L32)
- [MissionComp.ts](file://assets/script/game/map/MissionComp.ts#L114-L120)
#### home_active方法 - 状态激活逻辑
home_active方法是基地界面激活的核心逻辑包含两个关键步骤
1. **数据更新**调用uodate_data()方法(当前为空,但设计意图明确)
2. **界面激活**:设置节点可见性
#### uodate_data方法 - 设计意图分析
虽然当前实现为空但从命名和设计模式来看uodate_data方法预期用于
- 同步基地生命值信息
- 更新防御状态数据
- 刷新基地资源显示
- 更新英雄驻守状态
这种设计遵循了MVVM模式的思想为未来的数据绑定和自动更新做好准备。
#### isWxClient方法 - 平台检测机制
```typescript
isWxClient(){
return typeof wx !== 'undefined' && typeof (wx as any).getSystemInfoSync === 'function';
}
```
该方法通过检查wx对象的存在性和特定方法来判断是否运行在微信环境中为微信小游戏特性提供支持。
#### btn_func方法 - 交互接口预留
btn_func方法作为按钮交互的预留接口为未来扩展按钮功能提供便利
- 参数e事件名称或类型标识
- 参数data附加数据对象
- 设计目的:支持按钮点击、触摸等交互事件
**章节来源**
- [MissionHomeComp.ts](file://assets/script/game/map/MissionHomeComp.ts#L26-L53)
### MissionComp战斗流程管理
#### 事件监听机制
MissionComp通过on方法注册多个事件监听器
```mermaid
flowchart TD
Start([游戏启动]) --> MissionStart["监听MissionStart事件"]
MissionStart --> FightReady["监听FightReady事件"]
FightReady --> FightStart["监听FightStart事件"]
FightStart --> MonDead["监听MonDead事件"]
MonDead --> HeroDead["监听HeroDead事件"]
HeroDead --> FightEnd["监听FightEnd事件"]
FightEnd --> MissionEnd["监听MissionEnd事件"]
MissionEnd --> MissionEndLogic["执行mission_end逻辑"]
MissionEndLogic --> CleanComponents["清理组件"]
CleanComponents --> End([流程结束])
```
**图表来源**
- [MissionComp.ts](file://assets/script/game/map/MissionComp.ts#L28-L36)
#### 战斗状态管理
MissionComp维护复杂的战斗状态包括
- `smc.mission.play`:战斗是否进行中
- `smc.mission.pause`:战斗是否暂停
- `smc.mission.in_fight`:是否处于战斗状态
- `smc.vmdata.mission_data`:战斗数据统计
**章节来源**
- [MissionComp.ts](file://assets/script/game/map/MissionComp.ts#L28-L151)
## 事件驱动机制
### 事件流分析
```mermaid
sequenceDiagram
participant Player as "玩家"
participant MissionComp as "MissionComp"
participant GameEvent as "GameEvent"
participant MissionHomeComp as "MissionHomeComp"
participant UI as "UI界面"
Player->>MissionComp : 开始战斗
MissionComp->>GameEvent : 触发MissionStart
GameEvent->>MissionComp : 分发事件
MissionComp->>MissionComp : mission_start()
MissionComp->>UI : 显示战斗界面
Note over MissionComp : 战斗进行中...
Player->>MissionComp : 英雄死亡
MissionComp->>GameEvent : 触发HeroDead
GameEvent->>MissionComp : 分发事件
MissionComp->>MissionComp : do_hero_dead()
MissionComp->>GameEvent : 触发FightEnd
GameEvent->>MissionComp : 分发事件
MissionComp->>MissionComp : fight_end()
MissionComp->>GameEvent : 触发MissionEnd
GameEvent->>MissionHomeComp : 分发事件
MissionHomeComp->>MissionHomeComp : mission_end()
MissionHomeComp->>MissionHomeComp : home_active()
MissionHomeComp->>UI : 激活基地界面
```
**图表来源**
- [MissionComp.ts](file://assets/script/game/map/MissionComp.ts#L66-L120)
- [MissionHomeComp.ts](file://assets/script/game/map/MissionHomeComp.ts#L26-L32)
### GameEvent枚举定义
GameEvent枚举定义了游戏中的所有事件类型其中MissionEnd事件是基地状态恢复的关键触发点。
**章节来源**
- [GameEvent.ts](file://assets/script/game/common/config/GameEvent.ts#L1-L70)
## 微信小游戏适配
### 平台检测机制
```mermaid
flowchart TD
Start([应用启动]) --> CheckWx["检查wx对象存在性"]
CheckWx --> HasWx{"wx对象存在?"}
HasWx --> |否| WebPlatform["Web平台"]
HasWx --> |是| CheckMethod["检查getSystemInfoSync方法"]
CheckMethod --> HasMethod{"方法存在?"}
HasMethod --> |否| OtherPlatform["其他平台"]
HasMethod --> |是| WeChatPlatform["微信平台"]
WebPlatform --> DisableFeatures["禁用微信特性"]
OtherPlatform --> DisableFeatures
WeChatPlatform --> EnableFeatures["启用微信特性"]
```
**图表来源**
- [SingletonModuleComp.ts](file://assets/script/game/common/SingletonModuleComp.ts#L58-L62)
- [MissionHomeComp.ts](file://assets/script/game/map/MissionHomeComp.ts#L40-L42)
### 数据同步机制
isWxClient方法不仅用于环境检测还为后续的数据同步功能提供基础。当检测到微信环境时系统会启用云端数据同步功能。
**章节来源**
- [SingletonModuleComp.ts](file://assets/script/game/common/SingletonModuleComp.ts#L58-L195)
## 组件间协作流程
### 基地状态恢复完整流程
```mermaid
flowchart TD
BattleEnd([战斗结束]) --> MissionEndEvent["触发MissionEnd事件"]
MissionEndEvent --> MissionHomeComp["MissionHomeComp接收事件"]
MissionHomeComp --> MissionEndMethod["调用mission_end方法"]
MissionEndMethod --> HomeActive["调用home_active方法"]
HomeActive --> UpdateData["调用uodate_data方法"]
UpdateData --> ActivateNode["设置node.active=true"]
ActivateNode --> ShowUI["显示基地界面"]
ShowUI --> CheckWx{"检查微信环境"}
CheckWx --> |是| SyncData["同步云端数据"]
CheckWx --> |否| Complete["流程完成"]
SyncData --> Complete
```
**图表来源**
- [MissionHomeComp.ts](file://assets/script/game/map/MissionHomeComp.ts#L26-L35)
- [CardController.ts](file://assets/script/game/map/CardController.ts#L32-L35)
### CardController集成
CardController作为页面控制器负责在战斗界面和基地界面之间切换
```typescript
page_init(){
this.node.getChildByName("mission_home").active=true;
this.node.getChildByName("mission").active=false;
}
```
这种设计实现了清晰的界面分离,确保用户能够直观地从战斗状态过渡到基地状态。
**章节来源**
- [CardController.ts](file://assets/script/game/map/CardController.ts#L32-L35)
## 性能考虑
### 内存管理策略
MissionHomeComp实现了reset方法来处理组件销毁和内存释放
```typescript
reset() {
this.node.destroy();
}
```
这种方法确保了组件在不需要时能够及时释放资源,避免内存泄漏。
### 事件监听优化
通过精确的事件监听机制,避免了不必要的回调调用,提高了整体性能。
### 状态同步优化
uodate_data方法的预留设计允许未来实现增量更新减少不必要的UI刷新操作。
## 总结
MissionHomeComp作为基地状态的视图控制器在游戏架构中扮演着重要角色。它通过事件驱动机制实现了从战斗到基地状态的平滑过渡同时为未来的功能扩展预留了充足的空间。
### 主要特点
1. **事件驱动架构**通过MissionEnd事件触发基地状态恢复
2. **状态管理清晰**home_active方法封装了界面激活逻辑
3. **平台适配完善**isWxClient方法支持微信小游戏特性
4. **扩展性强**btn_func方法预留了按钮交互接口
5. **性能优化**:合理的内存管理和事件监听机制
### 设计优势
- **模块化设计**MissionHomeComp独立于具体业务逻辑
- **可测试性**:清晰的方法边界便于单元测试
- **可维护性**:预留的扩展接口降低了未来修改的成本
- **跨平台兼容**:完善的平台检测机制确保多环境支持
这种设计模式体现了现代游戏开发中关注分离、可扩展性和平台兼容性的最佳实践,为构建高质量的游戏应用奠定了坚实基础。

View File

@@ -0,0 +1,423 @@
# 奖励UI交互
<cite>
**本文档中引用的文件**
- [MissionComp.ts](file://assets/script/game/map/MissionComp.ts)
- [VictoryComp.ts](file://assets/script/game/map/VictoryComp.ts)
- [MissionHeroComp.ts](file://assets/script/game/map/MissionHeroComp.ts)
- [MissionMonComp.ts](file://assets/script/game/map/MissionMonComp.ts)
- [MissionHomeComp.ts](file://assets/script/game/map/MissionHomeComp.ts)
- [GameEvent.ts](file://assets/script/game/common/config/GameEvent.ts)
- [GameUIConfig.ts](file://assets/script/game/common/config/GameUIConfig.ts)
- [SingletonModuleComp.ts](file://assets/script/game/common/SingletonModuleComp.ts)
</cite>
## 目录
1. [系统概述](#系统概述)
2. [核心组件架构](#核心组件架构)
3. [事件驱动机制](#事件驱动机制)
4. [奖励触发条件](#奖励触发条件)
5. [UI界面展示](#ui界面展示)
6. [数据绑定与状态管理](#数据绑定与状态管理)
7. [界面过渡动画](#界面过渡动画)
8. [用户交互反馈](#用户交互反馈)
9. [系统集成流程](#系统集成流程)
10. [故障排除指南](#故障排除指南)
## 系统概述
奖励系统UI交互是游戏战斗胜利后的重要组成部分负责在玩家完成战斗后展示奖励选项、经验值、金币和钻石等资源。系统采用事件驱动架构通过MissionComp作为核心控制器协调各个子组件完成完整的奖励展示流程。
### 系统特点
- **事件驱动**基于GameEvent机制的松耦合设计
- **数据驱动**使用MVVM模式实现数据绑定
- **状态管理**通过SingletonModuleComp统一管理游戏状态
- **动画流畅**:支持平滑的界面过渡效果
## 核心组件架构
```mermaid
classDiagram
class MissionComp {
+rewards : any[]
+game_data : any
+onLoad() void
+do_hero_dead(event, data) void
+fight_end() void
+mission_start() void
+to_fight() void
}
class VictoryComp {
+reward_lv : number
+reward_num : number
+rewards : any[]
+game_data : any
+onAdded(args) void
+victory_end() void
+restart() void
+double_reward() void
}
class MissionHeroCompComp {
+Friend_is_dead : boolean
+current_hero_uuid : number
+heros : any[]
+onLoad() void
+fight_ready() void
+addHero(uuid, is_zhaohuan) void
}
class MissionMonCompComp {
+monsterQueue : Array
+spawnInterval : number
+spawnCount : number
+onLoad() void
+fight_ready() void
+generateMonstersFromStageConfig(configs) void
}
class MissionHomeComp {
+onLoad() void
+home_active() void
+mission_end() void
}
class SingletonModuleComp {
+mission : any
+vmdata : any
+guides : any[]
+data : any
}
MissionComp --> VictoryComp : "触发FightEnd事件"
MissionComp --> SingletonModuleComp : "更新游戏状态"
VictoryComp --> SingletonModuleComp : "读取游戏数据"
MissionHeroCompComp --> SingletonModuleComp : "监控英雄状态"
MissionMonCompComp --> SingletonModuleComp : "监控怪物状态"
MissionHomeComp --> SingletonModuleComp : "监控关卡状态"
```
**图表来源**
- [MissionComp.ts](file://assets/script/game/map/MissionComp.ts#L15-L151)
- [VictoryComp.ts](file://assets/script/game/map/VictoryComp.ts#L15-L75)
- [MissionHeroComp.ts](file://assets/script/game/map/MissionHeroComp.ts#L12-L81)
- [MissionMonComp.ts](file://assets/script/game/map/MissionMonComp.ts#L15-L240)
- [MissionHomeComp.ts](file://assets/script/game/map/MissionHomeComp.ts#L12-L54)
- [SingletonModuleComp.ts](file://assets/script/game/common/SingletonModuleComp.ts#L25-L195)
**章节来源**
- [MissionComp.ts](file://assets/script/game/map/MissionComp.ts#L1-L151)
- [VictoryComp.ts](file://assets/script/game/map/VictoryComp.ts#L1-L75)
- [MissionHeroComp.ts](file://assets/script/game/map/MissionHeroComp.ts#L1-L81)
- [MissionMonComp.ts](file://assets/script/game/map/MissionMonComp.ts#L1-L240)
- [MissionHomeComp.ts](file://assets/script/game/map/MissionHomeComp.ts#L1-L54)
## 事件驱动机制
### 核心事件流程
```mermaid
sequenceDiagram
participant Player as 玩家
participant MissionComp as MissionComp
participant GameEvent as GameEvent
participant VictoryComp as VictoryComp
participant GUI as GUI系统
participant SM as SingletonModule
Player->>MissionComp : 战斗结束
MissionComp->>GameEvent : dispatchEvent(FightEnd)
GameEvent->>MissionComp : 监听FightEnd事件
MissionComp->>SM : 更新游戏状态
MissionComp->>GUI : oops.gui.open(UIID.Victory)
GUI->>VictoryComp : 创建胜利界面
VictoryComp->>VictoryComp : onAdded(args)
VictoryComp->>VictoryComp : 展示奖励数据
VictoryComp->>Player : 显示奖励选项
Note over Player,SM : 奖励界面完全加载并显示
```
**图表来源**
- [MissionComp.ts](file://assets/script/game/map/MissionComp.ts#L32-L35)
- [GameEvent.ts](file://assets/script/game/common/config/GameEvent.ts#L40-L41)
- [GameUIConfig.ts](file://assets/script/game/common/config/GameUIConfig.ts#L12-L13)
### 事件监听与响应
系统通过事件总线机制实现组件间的解耦通信:
1. **FightEnd事件触发**当所有英雄死亡时MissionComp检测到战斗结束状态
2. **状态更新**更新SingletonModuleComp中的游戏状态
3. **界面打开**通过GUI系统打开胜利界面
4. **数据传递**将rewards和game_data参数传递给Victory界面
**章节来源**
- [MissionComp.ts](file://assets/script/game/map/MissionComp.ts#L55-L65)
- [GameEvent.ts](file://assets/script/game/common/config/GameEvent.ts#L40-L41)
- [GameUIConfig.ts](file://assets/script/game/common/config/GameUIConfig.ts#L12-L13)
## 奖励触发条件
### 英雄死亡触发机制
```mermaid
flowchart TD
Start([战斗开始]) --> Monitor[监控英雄状态]
Monitor --> CheckHero{检查英雄数量}
CheckHero --> |英雄存活| Continue[继续战斗]
CheckHero --> |英雄死亡| Decrement[减少英雄数量]
Decrement --> CheckAllDead{所有英雄死亡?}
CheckAllDead --> |否| Continue
CheckAllDead --> |是| TriggerFightEnd[触发FightEnd事件]
TriggerFightEnd --> OpenVictory[打开胜利界面]
OpenVictory --> PassData[传递奖励数据]
PassData --> End([流程结束])
Continue --> Monitor
```
**图表来源**
- [MissionComp.ts](file://assets/script/game/map/MissionComp.ts#L55-L65)
### 怪物击杀触发机制
系统通过MissionMonComp监控怪物状态每击杀一只怪物会
- 更新怪物数量计数器
- 触发相应的事件通知
- 记录战斗统计数据
### 基地保护触发机制
MissionHomeComp负责监控基地状态当基地受到威胁时
- 更新基地保护状态
- 触发防御机制
- 记录基地受损情况
**章节来源**
- [MissionComp.ts](file://assets/script/game/map/MissionComp.ts#L47-L52)
- [MissionMonComp.ts](file://assets/script/game/map/MissionMonComp.ts#L47-L52)
- [MissionHomeComp.ts](file://assets/script/game/map/MissionHomeComp.ts#L25-L35)
## UI界面展示
### 胜利界面结构
VictoryComp负责展示战斗胜利后的奖励界面包含以下核心元素
| 组件名称 | 功能描述 | 数据绑定 |
|---------|---------|---------|
| title.victory | 胜利标题显示 | 自动激活 |
| btns.next | 下一步按钮 | 延迟0.2秒激活 |
| reward_lv | 奖励等级 | 动态计算 |
| reward_num | 奖励数量 | 固定值2 |
| game_data.exp | 经验值奖励 | 从MissionComp传递 |
| game_data.gold | 金币奖励 | 从MissionComp传递 |
| game_data.diamond | 钻石奖励 | 从MissionComp传递 |
### 界面初始化流程
```mermaid
flowchart TD
Load[VictoryComp加载] --> ReceiveArgs[接收参数]
ReceiveArgs --> CheckGameData{检查game_data}
CheckGameData --> |存在| AssignData[分配游戏数据]
CheckGameData --> |不存在| UseDefault[使用默认数据]
AssignData --> ShowTitle[显示胜利标题]
UseDefault --> ShowTitle
ShowTitle --> HideButton[隐藏下一步按钮]
HideButton --> DelayShow[延迟0.2秒显示按钮]
DelayShow --> Ready[界面准备就绪]
```
**图表来源**
- [VictoryComp.ts](file://assets/script/game/map/VictoryComp.ts#L28-L42)
**章节来源**
- [VictoryComp.ts](file://assets/script/game/map/VictoryComp.ts#L15-L75)
## 数据绑定与状态管理
### MVVM数据流
系统采用MVVM架构实现数据绑定
```mermaid
graph TB
subgraph "数据层"
VMData[vmdata对象]
GameData[game_data]
Rewards[rewards数组]
end
subgraph "视图层"
VictoryUI[胜利界面UI]
HeroStats[英雄统计]
RewardDisplay[奖励展示]
end
subgraph "控制层"
VictoryComp[VictoryComp组件]
SingletonModule[SingletonModuleComp]
end
VMData --> VictoryComp
GameData --> VictoryComp
Rewards --> VictoryComp
VictoryComp --> VictoryUI
VictoryComp --> HeroStats
VictoryComp --> RewardDisplay
SingletonModule --> VMData
```
**图表来源**
- [VictoryComp.ts](file://assets/script/game/map/VictoryComp.ts#L18-L25)
- [SingletonModuleComp.ts](file://assets/script/game/common/SingletonModuleComp.ts#L45-L65)
### 状态同步机制
SingletonModuleComp作为全局状态管理中心维护以下关键状态
| 状态字段 | 类型 | 描述 | 更新时机 |
|---------|------|------|---------|
| mission.status | number | 游戏状态(0:未开始, 1:进行中, 2:胜利, 3:失败) | 战斗开始/结束时 |
| mission.play | boolean | 游戏是否在播放 | 战斗开始/结束时 |
| mission.pause | boolean | 游戏是否暂停 | 暂停/恢复时 |
| vmdata.mission_data.mon_num | number | 怪物数量 | 怪物生成/死亡时 |
| vmdata.mission_data.hero_num | number | 英雄数量 | 英雄生成/死亡时 |
| vmdata.mission_data.fight_time | number | 战斗时间 | 每帧更新 |
**章节来源**
- [SingletonModuleComp.ts](file://assets/script/game/common/SingletonModuleComp.ts#L25-L45)
- [MissionComp.ts](file://assets/script/game/map/MissionComp.ts#L130-L140)
## 界面过渡动画
### 打开动画流程
```mermaid
sequenceDiagram
participant GUI as GUI系统
participant VictoryComp as VictoryComp
participant UI as UI节点
participant Player as 玩家
GUI->>VictoryComp : open(UIID.Victory)
VictoryComp->>VictoryComp : onAdded(args)
VictoryComp->>UI : 设置初始状态
UI->>Player : 隐藏胜利标题
UI->>Player : 隐藏下一步按钮
VictoryComp->>VictoryComp : scheduleOnce(0.2秒)
VictoryComp->>UI : 显示下一步按钮
UI->>Player : 平滑显示界面
Note over Player : 界面完全加载并显示
```
**图表来源**
- [VictoryComp.ts](file://assets/script/game/map/VictoryComp.ts#L28-L42)
### 关闭动画流程
界面关闭时的清理流程:
1. 调用victory_end()方法
2. 清理游戏数据
3. 分发MissionEnd事件
4. 通过GUI系统移除界面节点
**章节来源**
- [VictoryComp.ts](file://assets/script/game/map/VictoryComp.ts#L44-L50)
## 用户交互反馈
### 按钮交互机制
胜利界面提供多种用户交互选项:
| 按钮功能 | 触发事件 | 动作描述 |
|---------|---------|---------|
| next按钮 | 点击 | 调用victory_end() |
| restart按钮 | 点击 | 调用restart() |
| double_reward按钮 | 点击 | 调用double_reward() |
| watch_ad按钮 | 点击 | 调用watch_ad() |
### 交互状态管理
```mermaid
stateDiagram-v2
[*] --> Loading : 界面加载
Loading --> Ready : 0.2秒后激活按钮
Ready --> Restart : 点击重启
Ready --> Next : 点击下一步
Ready --> Double : 点击双倍奖励
Ready --> Ad : 点击观看广告
Restart --> [*] : 重新开始
Next --> [*] : 结束战斗
Double --> [*] : 双倍奖励
Ad --> [*] : 广告奖励
```
**图表来源**
- [VictoryComp.ts](file://assets/script/game/map/VictoryComp.ts#L44-L65)
**章节来源**
- [VictoryComp.ts](file://assets/script/game/map/VictoryComp.ts#L44-L75)
## 系统集成流程
### 完整奖励流程
```mermaid
flowchart TD
Start([战斗开始]) --> FightLoop[战斗循环]
FightLoop --> CheckConditions{检查胜利条件}
CheckConditions --> |英雄存活| ContinueFight[继续战斗]
CheckConditions --> |英雄死亡| TriggerFightEnd[触发FightEnd]
TriggerFightEnd --> UpdateState[更新游戏状态]
UpdateState --> OpenVictory[打开胜利界面]
OpenVictory --> BindData[绑定奖励数据]
BindData --> ShowRewards[展示奖励选项]
ShowRewards --> WaitInput[等待用户输入]
WaitInput --> ProcessChoice{用户选择}
ProcessChoice --> |继续| NextLevel[下一关卡]
ProcessChoice --> |重新开始| Restart[重新开始]
ProcessChoice --> |双倍奖励| DoubleReward[双倍奖励]
ProcessChoice --> |观看广告| WatchAd[观看广告]
NextLevel --> Start
Restart --> Start
DoubleReward --> Start
WatchAd --> Start
```
**图表来源**
- [MissionComp.ts](file://assets/script/game/map/MissionComp.ts#L55-L65)
- [VictoryComp.ts](file://assets/script/game/map/VictoryComp.ts#L44-L75)
### 错误处理机制
系统包含完善的错误处理机制:
- **网络错误**通过GUI系统显示错误提示
- **数据同步错误**:自动回滚操作并提示用户
- **界面加载错误**:提供重试机制
- **事件监听错误**:记录日志并尝试恢复
**章节来源**
- [MissionComp.ts](file://assets/script/game/map/MissionComp.ts#L1-L151)
- [VictoryComp.ts](file://assets/script/game/map/VictoryComp.ts#L1-L75)
## 故障排除指南
### 常见问题及解决方案
| 问题描述 | 可能原因 | 解决方案 |
|---------|---------|---------|
| 胜利界面无法打开 | UIID配置错误 | 检查GameUIConfig.ts中的UIID.Victory配置 |
| 奖励数据不显示 | 数据绑定失败 | 验证SingletonModuleComp中的vmdata结构 |
| 事件监听失效 | 组件未正确注册 | 检查@ecs.register装饰器的使用 |
| 界面动画异常 | 节点状态错误 | 确保节点的active状态正确管理 |
| 数据同步失败 | 网络连接问题 | 实现重试机制并提供用户提示 |
### 性能优化建议
1. **事件监听优化**:及时移除不需要的事件监听器
2. **内存管理**:确保组件正确销毁避免内存泄漏
3. **数据缓存**合理使用SingletonModuleComp进行数据缓存
4. **异步加载**使用async/await模式处理异步操作
### 调试技巧
- 使用console.log记录关键事件的触发
- 监控SingletonModuleComp的状态变化
- 检查GUI系统的open和remove调用
- 验证数据绑定的路径正确性
**章节来源**
- [MissionComp.ts](file://assets/script/game/map/MissionComp.ts#L140-L151)
- [SingletonModuleComp.ts](file://assets/script/game/common/SingletonModuleComp.ts#L100-L150)

View File

@@ -0,0 +1,399 @@
# 怪物生成与波次控制
<cite>
**本文档引用的文件**
- [MissionMonComp.ts](file://assets/script/game/map/MissionMonComp.ts)
- [RogueConfig.ts](file://assets/script/game/map/RogueConfig.ts)
- [heroSet.ts](file://assets/script/game/common/config/heroSet.ts)
- [Mon.ts](file://assets/script/game/hero/Mon.ts)
- [MonModelComp.ts](file://assets/script/game/hero/MonModelComp.ts)
</cite>
## 目录
1. [概述](#概述)
2. [系统架构](#系统架构)
3. [核心组件分析](#核心组件分析)
4. [怪物生成机制](#怪物生成机制)
5. [波次控制逻辑](#波次控制逻辑)
6. [随机事件系统](#随机事件系统)
7. [状态机图示](#状态机图示)
8. [性能优化考虑](#性能优化考虑)
9. [故障排除指南](#故障排除指南)
10. [总结](#总结)
## 概述
MissionMonCompComp是游戏肉鸽模式中负责怪物生成与波次控制的核心组件。它实现了基于关卡配置的动态怪物生成系统支持不同类型的怪物普通、精英、Boss并采用波次节奏控制机制每5只怪物后暂停5秒形成波次节奏。
该系统通过RogueConfig提供配置驱动的怪物生成策略支持怪物强度随关卡递增同时集成了随机事件系统为游戏体验增加不确定性。
## 系统架构
```mermaid
graph TB
subgraph "怪物生成系统"
A[MissionMonCompComp] --> B[RogueConfig]
A --> C[Monster Queue]
A --> D[Timer System]
A --> E[Random Event System]
end
subgraph "配置层"
B --> F[Stage Config Rules]
B --> G[Monster Type Config]
B --> H[Event Config]
end
subgraph "实体层"
I[Monster Entity] --> J[MonModelComp]
I --> K[BattleMoveComp]
I --> L[TalComp]
end
A --> I
C --> M[Spawn Queue Management]
D --> N[Wave Timing Control]
E --> O[Event Processing]
```
**图表来源**
- [MissionMonComp.ts](file://assets/script/game/map/MissionMonComp.ts#L1-L240)
- [RogueConfig.ts](file://assets/script/game/map/RogueConfig.ts#L1-L311)
## 核心组件分析
### MissionMonCompComp 主控制器
MissionMonCompComp作为主要的怪物生成控制器维护以下关键状态
| 状态变量 | 类型 | 描述 |
|---------|------|------|
| monsterQueue | Array | 怪物生成队列,存储待生成的怪物配置 |
| isSpawning | boolean | 是否正在生成怪物的状态标志 |
| spawnInterval | number | 单个怪物生成间隔默认0.1秒) |
| spawnTimer | number | 生成计时器,累积时间用于控制生成节奏 |
| spawnCount | number | 已生成怪物计数器 |
| pauseInterval | number | 波次暂停间隔默认5秒 |
| isPausing | boolean | 是否处于波次暂停状态 |
| currentEvent | EventType | 当前关卡的随机事件类型 |
| eventProcessed | boolean | 随机事件是否已处理的标志 |
**章节来源**
- [MissionMonComp.ts](file://assets/script/game/map/MissionMonComp.ts#L18-L35)
### RogueConfig 配置系统
RogueConfig提供了完整的配置驱动怪物生成框架
```mermaid
classDiagram
class RogueConfig {
+MonsterType NORMAL
+MonsterType ELITE
+MonsterType BOSS
+StageType NORMAL
+StageType ELITE
+StageType BOSS
+StageType EVENT
+EventType TREASURE
+EventType TRAP
+EventType BUFF
+EventType DEBUFF
+getStageType(stageNumber, level) StageType
+getStageMonsterConfigs(stageNumber, level) Array
+calculateMonsterCount(stageNumber, baseCount, minCount, maxCount) number
+calculateMonsterStrengthMultiplier(stageNumber, level) number
+getRandomEvent() EventType
}
class StageConfigRules {
+NORMAL Monsters
+ELITE Monsters
+BOSS Monsters
+EVENT Monsters
}
class EventConfig {
+TREASURE Probability
+TRAP Probability
+BUFF Probability
+DEBUFF Probability
}
RogueConfig --> StageConfigRules
RogueConfig --> EventConfig
```
**图表来源**
- [RogueConfig.ts](file://assets/script/game/map/RogueConfig.ts#L25-L132)
**章节来源**
- [RogueConfig.ts](file://assets/script/game/map/RogueConfig.ts#L1-L311)
## 怪物生成机制
### do_mon_wave 方法 - 波次初始化
do_mon_wave方法是波次生成的入口点负责初始化所有相关状态并启动怪物生成流程
```mermaid
flowchart TD
A[do_mon_wave 开始] --> B[重置生成状态]
B --> C[获取当前关卡信息]
C --> D[确定关卡类型]
D --> E{是否为事件关卡?}
E --> |是| F[生成随机事件]
E --> |否| G[清除事件状态]
F --> H[获取怪物配置]
G --> H
H --> I[生成怪物队列]
I --> J[开始波次生成]
B --> B1[spawnCount = 0]
B --> B2[isPausing = false]
B --> B3[spawnTimer = 0]
B --> B4[eventProcessed = false]
```
**图表来源**
- [MissionMonComp.ts](file://assets/script/game/map/MissionMonComp.ts#L85-L115)
### generateMonstersFromStageConfig 方法 - 队列生成
generateMonstersFromStageConfig方法负责解析怪物配置并构建生成队列
```mermaid
sequenceDiagram
participant MC as MissionMonComp
participant RC as RogueConfig
participant MQ as MonsterQueue
MC->>RC : getStageMonsterConfigs(stage, level)
RC->>RC : generateStageConfig(stage, level)
RC->>RC : calculateMonsterStrengthMultiplier(stage, level)
loop 每个怪物类型
RC->>RC : getMonsterUUIDsByType(type)
RC->>RC : 随机选择UUID
RC-->>MC : 返回怪物配置
end
MC->>MC : generateMonstersFromStageConfig(configs)
loop 每个怪物配置
MC->>MC : 计算位置索引
MC->>MQ : addToStageSpawnQueue()
end
```
**图表来源**
- [MissionMonComp.ts](file://assets/script/game/map/MissionMonComp.ts#L147-L185)
- [RogueConfig.ts](file://assets/script/game/map/RogueConfig.ts#L265-L295)
**章节来源**
- [MissionMonComp.ts](file://assets/script/game/map/MissionMonComp.ts#L147-L185)
- [RogueConfig.ts](file://assets/script/game/map/RogueConfig.ts#L265-L295)
### 怪物配置结构
每个怪物配置包含以下关键信息:
| 字段 | 类型 | 描述 |
|------|------|------|
| uuid | number | 怪物唯一标识符对应HeroInfo中的怪物UUID |
| position | number | 怪物生成位置索引0-4 |
| type | MonsterType | 怪物类型NORMAL/ELITE/BOSS |
| level | number | 怪物等级默认为1 |
| strengthMultiplier | number | 强度倍率,随关卡递增 |
**章节来源**
- [MissionMonComp.ts](file://assets/script/game/map/MissionMonComp.ts#L186-L205)
## 波次控制逻辑
### 定时器系统 - update 方法
update方法实现了精确的波次控制逻辑每帧更新计时器并管理生成节奏
```mermaid
flowchart TD
A[update(dt)] --> B{游戏是否进行中?}
B --> |否| C[退出更新]
B --> |是| D{有随机事件?}
D --> |是且未处理| E[processRandomEvent]
D --> |否或已处理| F{有怪物队列?}
E --> F
F --> |否| C
F --> |是| G[累加spawnTimer]
G --> H{是否暂停状态?}
H --> |是| I{暂停时间到?}
I --> |否| C
I --> |是| J[结束暂停,重置状态]
H --> |否| K{生成时间到?}
K --> |否| C
K --> |是| L[spawnNextMonster]
L --> M{达到5只?}
M --> |否| N[重置计时器]
M --> |是| O[进入暂停状态]
J --> P[继续生成]
N --> P
O --> Q[暂停5秒]
P --> C
Q --> C
```
**图表来源**
- [MissionMonComp.ts](file://assets/script/game/map/MissionMonComp.ts#L55-L85)
### 波次节奏控制
波次控制采用"5+5"模式:
- **生成阶段**每0.1秒生成一只怪物连续生成5只
- **暂停阶段**生成5只后暂停5秒然后恢复生成
- **计数器**spawnCount跟踪已生成怪物数量
- **状态标志**isPausing控制暂停状态
**章节来源**
- [MissionMonComp.ts](file://assets/script/game/map/MissionMonComp.ts#L55-L85)
### spawnNextMonster 方法 - 怪物实例化
spawnNextMonster方法从队列中取出怪物配置并创建实体
```mermaid
sequenceDiagram
participant MC as MissionMonComp
participant ECS as ECS系统
participant M as Monster实体
participant SM as Scene Manager
MC->>MC : 从队列移除第一个怪物
MC->>ECS : 获取Monster实体
MC->>M : load(position, scale, uuid, isBoss, isCall, strengthMultiplier)
M->>SM : 创建怪物节点
M->>M : 设置位置和缩放
M->>M : 加载怪物资源
M->>M : 初始化战斗参数
M->>SM : 添加到场景层
MC->>MC : 增加spawnCount
MC->>MC : 更新怪物计数显示
```
**图表来源**
- [MissionMonComp.ts](file://assets/script/game/map/MissionMonComp.ts#L190-L215)
- [Mon.ts](file://assets/script/game/hero/Mon.ts#L35-L60)
**章节来源**
- [MissionMonComp.ts](file://assets/script/game/map/MissionMonComp.ts#L190-L215)
## 随机事件系统
### 事件类型与概率
随机事件系统提供四种不同类型的事件,每种事件都有对应的触发概率:
| 事件类型 | 概率 | 效果 | 处理方式 |
|----------|------|------|----------|
| TREASURE | 30% | 增加50金币奖励 | 直接修改游戏数据 |
| TRAP | 25% | 对玩家造成伤害 | 需要实现具体伤害逻辑 |
| BUFF | 25% | 给玩家临时增益效果 | 需要实现增益系统 |
| DEBUFF | 20% | 给玩家临时减益效果 | 需要实现减益系统 |
### processRandomEvent 方法
processRandomEvent方法根据当前事件类型执行相应的处理逻辑
```mermaid
flowchart TD
A[processRandomEvent] --> B{检查currentEvent}
B --> |null| C[无事件,退出]
B --> |有效事件| D{switch currentEvent}
D --> |TREASURE| E[增加50金币]
D --> |TRAP| F[造成伤害逻辑]
D --> |BUFF| G[增加临时增益]
D --> |DEBUFF| H[增加临时减益]
E --> I[标记事件已处理]
F --> I
G --> I
H --> I
I --> J[eventProcessed = true]
```
**图表来源**
- [MissionMonComp.ts](file://assets/script/game/map/MissionMonComp.ts#L117-L145)
**章节来源**
- [MissionMonComp.ts](file://assets/script/game/map/MissionMonComp.ts#L117-L145)
- [RogueConfig.ts](file://assets/script/game/map/RogueConfig.ts#L105-L132)
## 状态机图示
### 怪物生成状态机
```mermaid
stateDiagram-v2
[*] --> 波次准备
波次准备 --> 事件检测 : do_mon_wave()
事件检测 --> 事件处理 : 是事件关卡
事件检测 --> 怪物生成 : 非事件关卡
事件处理 --> 怪物生成 : 事件已处理
怪物生成 --> 怪物实例化 : 队列非空
怪物实例化 --> 怪物实例化 : 生成间隔到达
怪物实例化 --> 波次暂停 : 达到5只
波次暂停 --> 怪物实例化 : 暂停结束
怪物实例化 --> 波次完成 : 队列为空
波次完成 --> [*]
```
### 波次节奏状态机
```mermaid
stateDiagram-v2
[*] --> 生成中
生成中 --> 生成中 : spawnTimer < spawnInterval
生成中 --> 怪物实例化 : spawnTimer >= spawnInterval
怪物实例化 --> 生成中 : spawnCount < 5
怪物实例化 --> 波次暂停 : spawnCount >= 5
波次暂停 --> 波次暂停 : pauseTimer < pauseInterval
波次暂停 --> 生成中 : pauseTimer >= pauseInterval
```
## 性能优化考虑
### 内存管理
1. **实体池化**Monster实体通过ecs.getEntity获取避免频繁创建销毁
2. **队列管理**使用shift/pop操作保持队列紧凑
3. **资源加载**:怪物资源预加载,减少运行时开销
### 计算优化
1. **配置缓存**RogueConfig中的计算结果可适当缓存
2. **随机数优化**Math.random()调用频率控制在合理范围内
3. **事件概率计算**:使用累积概率算法提高效率
### 渲染优化
1. **批量渲染**:怪物生成采用批量处理机制
2. **层级管理**怪物添加到专门的EntityLayer
3. **碰撞体延迟启用**:避免过早启用碰撞体影响性能
## 故障排除指南
### 常见问题及解决方案
| 问题 | 症状 | 可能原因 | 解决方案 |
|------|------|----------|----------|
| 怪物不生成 | 队列为空但游戏仍在进行 | 配置错误或事件阻塞 | 检查RogueConfig配置和事件处理 |
| 波次节奏异常 | 怪物生成过快或过慢 | 时间计算错误 | 验证update方法中的计时逻辑 |
| 事件不触发 | 事件关卡没有随机事件 | 概率计算错误 | 检查getRandomEvent函数 |
| 怪物位置错误 | 怪物出现在错误位置 | 位置索引计算错误 | 验证position计算逻辑 |
### 调试技巧
1. **日志记录**启用console.log语句跟踪关键状态变化
2. **断点调试**:在关键方法设置断点观察变量值
3. **状态监控**实时监控monsterQueue长度和计时器状态
**章节来源**
- [MissionMonComp.ts](file://assets/script/game/map/MissionMonComp.ts#L147-L185)
## 总结
MissionMonCompComp实现了一个功能完整且灵活的怪物生成与波次控制系统。该系统具有以下特点
1. **配置驱动**通过RogueConfig实现完全可配置的怪物生成策略
2. **波次节奏**:采用"5+5"模式确保游戏体验的平衡性
3. **随机事件**:集成随机事件系统增加游戏不确定性
4. **性能优化**:采用实体池化和批量处理优化性能
5. **扩展性强**:模块化设计便于功能扩展和维护
该系统为游戏肉鸽模式提供了坚实的怪物生成基础,支持复杂的关卡设计和多样化的游戏体验。通过合理的配置和适当的调整,可以满足不同类型游戏的需求。

View File

@@ -0,0 +1,505 @@
# 英雄管理组件交互
<cite>
**本文档引用的文件**
- [MissionHeroComp.ts](file://assets/script/game/map/MissionHeroComp.ts)
- [SingletonModuleComp.ts](file://assets/script/game/common/SingletonModuleComp.ts)
- [GameEvent.ts](file://assets/script/game/common/config/GameEvent.ts)
- [heroSet.ts](file://assets/script/game/common/config/heroSet.ts)
- [Hero.ts](file://assets/script/game/hero/Hero.ts)
- [HeroViewComp.ts](file://assets/script/game/hero/HeroViewComp.ts)
- [BattleMoveComp.ts](file://assets/script/game/common/ecs/position/BattleMoveComp.ts)
</cite>
## 目录
1. [简介](#简介)
2. [项目结构概览](#项目结构概览)
3. [核心组件分析](#核心组件分析)
4. [架构概览](#架构概览)
5. [详细组件分析](#详细组件分析)
6. [英雄生命周期管理](#英雄生命周期管理)
7. [事件处理机制](#事件处理机制)
8. [数据绑定关系](#数据绑定关系)
9. [时序图示例](#时序图示例)
10. [性能考虑](#性能考虑)
11. [故障排除指南](#故障排除指南)
12. [总结](#总结)
## 简介
MissionHeroCompComp类是游戏战斗系统中负责管理英雄生命周期的核心组件。它通过ECS架构模式实现了英雄的初始化、召唤、战斗管理和清理等完整生命周期流程。该组件与SingletonModuleComp单例、GameEvent事件系统以及Hero实体组件紧密协作形成了一个完整的英雄管理系统。
## 项目结构概览
```mermaid
graph TB
subgraph "战斗系统架构"
MissionHeroComp[MissionHeroCompComp<br/>英雄管理组件]
SingletonModule[SingletonModuleComp<br/>单例模块]
HeroEntity[Hero实体]
GameEvents[GameEvent事件系统]
end
subgraph "英雄组件体系"
HeroView[HeroViewComp<br/>英雄视图组件]
BattleMove[BattleMoveComp<br/>战斗移动组件]
HeroModel[HeroModelComp<br/>英雄模型组件]
end
subgraph "配置数据层"
HeroSet[heroSet配置]
GameConfig[GameEvent配置]
SMData[SMC数据]
end
MissionHeroComp --> SingletonModule
MissionHeroComp --> HeroEntity
MissionHeroComp --> GameEvents
HeroEntity --> HeroView
HeroEntity --> BattleMove
HeroEntity --> HeroModel
SingletonModule --> SMData
GameEvents --> GameConfig
HeroEntity --> HeroSet
```
**图表来源**
- [MissionHeroComp.ts](file://assets/script/game/map/MissionHeroComp.ts#L1-L81)
- [SingletonModuleComp.ts](file://assets/script/game/common/SingletonModuleComp.ts#L1-L195)
- [Hero.ts](file://assets/script/game/hero/Hero.ts#L15-L101)
## 核心组件分析
### MissionHeroCompComp类结构
MissionHeroCompComp继承自CCComp基类注册为ECS系统中的MissionHero组件。该类维护以下核心状态
- **timer**: 定时器组件,用于控制英雄召唤间隔
- **Friend_is_dead**: 标记友方英雄是否死亡
- **current_hero_uuid**: 当前英雄的唯一标识符
- **current_hero_num**: 当前英雄数量
- **heros**: 英雄数组,存储所有战斗中的英雄信息
**章节来源**
- [MissionHeroComp.ts](file://assets/script/game/map/MissionHeroComp.ts#L11-L18)
## 架构概览
```mermaid
classDiagram
class MissionHeroCompComp {
+Timer timer
+boolean Friend_is_dead
+number current_hero_uuid
+number current_hero_num
+any[] heros
+onLoad() void
+clear_heros() void
+fight_ready() void
+zhao_huan(event, args) void
+addHero(uuid, is_zhaohuan) void
+reset() void
}
class SingletonModuleComp {
+number fight_hero
+any heros
+any vmdata
+updateFihgtHero(heroId) void
+addHero(hero_uuid) void
}
class Hero {
+HeroModelComp HeroModel
+HeroViewComp HeroView
+BattleMoveComp BattleMove
+load(pos, scale, uuid, fight_pos) void
+hero_init(uuid, node) HeroViewComp
}
class GameEvent {
<<enumeration>>
FightReady
Zhaohuan
FightEnd
}
MissionHeroCompComp --> SingletonModuleComp : "使用"
MissionHeroCompComp --> Hero : "创建"
MissionHeroCompComp --> GameEvent : "监听"
SingletonModuleComp --> Hero : "配置"
```
**图表来源**
- [MissionHeroComp.ts](file://assets/script/game/map/MissionHeroComp.ts#L11-L81)
- [SingletonModuleComp.ts](file://assets/script/game/common/SingletonModuleComp.ts#L20-L50)
- [Hero.ts](file://assets/script/game/hero/Hero.ts#L15-L101)
## 详细组件分析
### fight_ready方法实现
fight_ready方法是战斗准备阶段的核心入口点负责初始化战斗环境中的英雄配置。
```mermaid
sequenceDiagram
participant Player as "玩家"
participant MissionHero as "MissionHeroCompComp"
participant SMC as "SingletonModuleComp"
participant Hero as "Hero实体"
participant ECS as "ECS系统"
Player->>MissionHero : 战斗准备开始
MissionHero->>SMC : 获取战斗英雄配置
SMC-->>MissionHero : 返回fight_hero配置
MissionHero->>MissionHero : 设置hero_num=0
MissionHero->>MissionHero : 调用addHero(fight_hero, false)
MissionHero->>ECS : 获取Hero实体
ECS-->>MissionHero : 返回Hero实例
MissionHero->>Hero : load(position, scale, uuid)
Hero->>Hero : 初始化英雄属性
Hero->>Hero : 设置战斗位置
Hero-->>Player : 英雄出现在战场
```
**图表来源**
- [MissionHeroComp.ts](file://assets/script/game/map/MissionHeroComp.ts#L32-L42)
- [Hero.ts](file://assets/script/game/hero/Hero.ts#L30-L60)
该方法执行以下关键步骤:
1. **状态重置**: 将`smc.vmdata.mission_data.hero_num`设置为0清空当前英雄计数
2. **英雄加载**: 调用`addHero(smc.fight_hero, false)`加载玩家选择的英雄
3. **配置应用**: 使用SMC单例中的fight_hero配置作为英雄标识
**章节来源**
- [MissionHeroComp.ts](file://assets/script/game/map/MissionHeroComp.ts#L32-L42)
### addHero方法实现
addHero方法是英雄加载的核心逻辑负责通过ECS系统获取Hero实体并调用其load方法。
```mermaid
flowchart TD
Start([开始addHero]) --> GetHero["获取Hero实体<br/>ecs.getEntity<Hero>(Hero)"]
GetHero --> SetParams["设置参数<br/>hero_pos=0<br/>scale=1"]
SetParams --> GetPos["获取英雄位置<br/>HeroPos[hero_pos].pos"]
GetPos --> LoadHero["调用hero.load()<br/>加载英雄实体"]
LoadHero --> InitProps["初始化英雄属性<br/>调用hero_init()"]
InitProps --> SetDirection["设置移动方向<br/>根据英雄类型"]
SetDirection --> UpdateCount["更新英雄计数<br/>smc.vmdata.mission_data.hero_num++"]
UpdateCount --> End([结束])
LoadHero --> ErrorHandler["错误处理"]
ErrorHandler --> End
```
**图表来源**
- [MissionHeroComp.ts](file://assets/script/game/map/MissionHeroComp.ts#L64-L70)
- [Hero.ts](file://assets/script/game/hero/Hero.ts#L30-L60)
addHero方法的具体实现细节
1. **实体获取**: 使用`ecs.getEntity<Hero>(Hero)`从ECS系统中获取Hero实体
2. **参数设置**: 固定英雄位置索引为0缩放比例为1
3. **位置计算**: 从HeroPos配置中获取英雄的战斗位置
4. **英雄加载**: 调用hero.load()方法完成英雄实体的初始化和渲染
**章节来源**
- [MissionHeroComp.ts](file://assets/script/game/map/MissionHeroComp.ts#L64-L70)
### zhao_huan事件处理
zhao_huan方法响应召唤指令事件实现实时英雄召唤功能。
```mermaid
sequenceDiagram
participant UI as "用户界面"
participant MissionHero as "MissionHeroCompComp"
participant EventSys as "事件系统"
participant Hero as "Hero实体"
UI->>EventSys : 发送Zhaohuan事件
EventSys->>MissionHero : 触发zhao_huan回调
MissionHero->>MissionHero : addHero(args.uuid, false)
MissionHero->>Hero : 创建新英雄实例
Hero-->>UI : 新英雄出现在战场
```
**图表来源**
- [MissionHeroComp.ts](file://assets/script/game/map/MissionHeroComp.ts#L50-L52)
该方法的特点:
- **实时响应**: 接收召唤事件参数中的英雄UUID
- **即时召唤**: 直接调用addHero方法加载新英雄
- **非召唤模式**: 第二个参数为false表示这不是召唤模式的英雄
**章节来源**
- [MissionHeroComp.ts](file://assets/script/game/map/MissionHeroComp.ts#L50-L52)
### clear_heros方法
clear_heros方法在战斗结束时执行英雄清理逻辑确保战斗环境的正确重置。
```mermaid
flowchart TD
Start([战斗结束]) --> ClearMethod["调用clear_heros()"]
ClearMethod --> LogCheck{"检查日志输出"}
LogCheck --> |启用| LogMessage["打印清理消息"]
LogCheck --> |禁用| SkipLog["跳过日志"]
LogMessage --> End([清理完成])
SkipLog --> End
Note1["目前方法体为空<br/>预留扩展空间"]
```
**图表来源**
- [MissionHeroComp.ts](file://assets/script/game/map/MissionHeroComp.ts#L28-L30)
当前实现特点:
- **空方法体**: 目前方法体为空,但预留了扩展空间
- **日志占位**: 包含注释掉的日志输出语句
- **扩展性**: 为未来的清理逻辑提供了接口
**章节来源**
- [MissionHeroComp.ts](file://assets/script/game/map/MissionHeroComp.ts#L28-L30)
## 英雄生命周期管理
### 英雄创建流程
```mermaid
stateDiagram-v2
[*] --> 初始化
初始化 --> 配置加载 : fight_ready事件
配置加载 --> 实体获取 : ecs.getEntity<Hero>()
实体获取 --> 位置设置 : HeroPos配置
位置设置 --> 属性初始化 : hero_init()
属性初始化 --> 移动设置 : BattleMove配置
移动设置 --> 计数更新 : hero_num++
计数更新 --> 战场就绪 : 英雄出现在战场
战场就绪 --> 战斗中 : 开始战斗
战斗中 --> 死亡检测 : 英雄死亡
死亡检测 --> 清理处理 : 英雄移除
清理处理 --> [*]
```
**图表来源**
- [Hero.ts](file://assets/script/game/hero/Hero.ts#L30-L80)
- [MissionHeroComp.ts](file://assets/script/game/map/MissionHeroComp.ts#L64-L70)
### 英雄属性系统
HeroViewComp组件负责管理英雄的所有属性和状态
| 属性类别 | 属性名称 | 描述 | 类型 |
|---------|---------|------|------|
| 基础属性 | base_hp/base_mp | 基础生命值/魔法值 | number |
| 核心属性 | hp/mp | 当前生命值/魔法值 | number |
| 攻击属性 | base_ap/base_map | 基础物理攻击/魔法攻击 | number |
| 防御属性 | base_def/mdef | 基础物理防御/魔法防御 | number |
| 移动属性 | base_speed/base_dis | 基础移动速度/攻击距离 | number |
| BUFF系统 | BUFFS/BUFFS_TEMP | 持久/临时BUFF数组 | Record |
**章节来源**
- [HeroViewComp.ts](file://assets/script/game/hero/HeroViewComp.ts#L72-L120)
## 事件处理机制
### 事件监听配置
MissionHeroCompComp通过on方法注册三个关键事件的处理器
```mermaid
graph LR
subgraph "事件监听"
FightReady[FightReady<br/>战斗准备]
Zhaohuan[Zhaohuan<br/>英雄召唤]
FightEnd[FightEnd<br/>战斗结束]
end
subgraph "处理方法"
FRHandler[fight_ready]
ZHHandler[zhao_huan]
FERHandler[clear_heros]
end
FightReady --> FRHandler
Zhaohuan --> ZHHandler
FightEnd --> FERHandler
```
**图表来源**
- [MissionHeroComp.ts](file://assets/script/game/map/MissionHeroComp.ts#L19-L23)
- [GameEvent.ts](file://assets/script/game/common/config/GameEvent.ts#L15-L25)
### 事件触发时机
| 事件名称 | 触发时机 | 处理内容 |
|---------|---------|---------|
| FightReady | 战斗开始前 | 初始化战斗英雄配置 |
| Zhaohuan | 英雄召唤时 | 动态添加新英雄 |
| FightEnd | 战斗结束后 | 清理战斗环境 |
**章节来源**
- [GameEvent.ts](file://assets/script/game/common/config/GameEvent.ts#L15-L25)
## 数据绑定关系
### SMC单例中的英雄数据
SingletonModuleComp通过vmdata属性系统实现与UI层的数据绑定
```mermaid
erDiagram
SingletonModuleComp {
number fight_hero
any heros
any monsters
object vmdata
}
VMData {
boolean game_over
boolean game_pause
object mission_data
number gold
}
MissionData {
number mon_num
number hero_num
number wave_time_num
boolean in_fight
number fight_time
number level
number max_mission
number coin
}
SingletonModuleComp ||--|| VMData : "包含"
VMData ||--|| MissionData : "包含"
```
**图表来源**
- [SingletonModuleComp.ts](file://assets/script/game/common/SingletonModuleComp.ts#L40-L60)
### 数据流映射
| 数据源 | 目标组件 | 绑定方式 | 更新时机 |
|-------|---------|---------|---------|
| smc.fight_hero | MissionHeroCompComp | 直接访问 | 战斗准备时 |
| smc.heros | UI界面 | MVVM绑定 | 英雄解锁时 |
| smc.vmdata.mission_data.hero_num | 战斗计数器 | 自动更新 | 英雄加载时 |
| smc.vmdata.gold | 金币显示 | MVVM绑定 | 金币变化时 |
**章节来源**
- [SingletonModuleComp.ts](file://assets/script/game/common/SingletonModuleComp.ts#L40-L60)
## 时序图示例
### 完整英雄加载时序
```mermaid
sequenceDiagram
participant Player as "玩家"
participant UI as "UI界面"
participant SMC as "SMC单例"
participant MissionHero as "MissionHeroComp"
participant ECS as "ECS系统"
participant Hero as "Hero实体"
participant BattleMove as "BattleMove组件"
Note over Player,BattleMove : 战斗准备阶段
Player->>UI : 选择战斗英雄
UI->>SMC : updateFihgtHero(5001)
SMC->>SMC : 更新fight_hero配置
Player->>MissionHero : 触发FightReady事件
MissionHero->>SMC : 获取smc.fight_hero
SMC-->>MissionHero : 返回英雄UUID 5001
MissionHero->>MissionHero : 设置hero_num=0
Note over Player,BattleMove : 英雄加载阶段
MissionHero->>ECS : ecs.getEntity<Hero>(Hero)
ECS-->>MissionHero : 返回Hero实例
MissionHero->>Hero : load(v3(-240,100,0), 1, 5001)
Hero->>Hero : 初始化英雄属性
Hero->>Hero : 设置战斗位置
Hero->>BattleMove : 配置移动方向
BattleMove-->>Hero : 设置targetX=0
Hero->>SMC : 更新hero_num++
SMC-->>Player : 英雄出现在战场
Note over Player,BattleMove : 战斗进行阶段
Player->>MissionHero : 触发Zhaohuan事件
MissionHero->>ECS : 再次获取Hero实体
ECS-->>MissionHero : 返回新的Hero实例
MissionHero->>Hero : load(v3(0,100,0), 1, 新英雄UUID)
Hero-->>Player : 新英雄加入战斗
```
**图表来源**
- [MissionHeroComp.ts](file://assets/script/game/map/MissionHeroComp.ts#L32-L70)
- [Hero.ts](file://assets/script/game/hero/Hero.ts#L30-L80)
- [SingletonModuleComp.ts](file://assets/script/game/common/SingletonModuleComp.ts#L120-L140)
### 英雄召唤时序
```mermaid
sequenceDiagram
participant Player as "玩家"
participant UI as "UI界面"
participant MissionHero as "MissionHeroComp"
participant EventSys as "事件系统"
participant ECS as "ECS系统"
participant Hero as "Hero实体"
Player->>UI : 点击召唤按钮
UI->>EventSys : dispatchEvent(Zhaohuan, {uuid : 5002})
EventSys->>MissionHero : 触发zhao_huan事件
MissionHero->>MissionHero : addHero(5002, false)
MissionHero->>ECS : ecs.getEntity<Hero>(Hero)
ECS-->>MissionHero : 返回Hero实例
MissionHero->>Hero : load(v3(0,100,0), 1, 5002)
Hero->>Hero : 初始化新英雄属性
Hero->>Hero : 设置战斗位置
Hero-->>Player : 新英雄出现在战场
Note over Player,Hero : 英雄加入战斗
Hero->>Hero : 开始参与战斗
```
**图表来源**
- [MissionHeroComp.ts](file://assets/script/game/map/MissionHeroComp.ts#L50-L52)
- [Hero.ts](file://assets/script/game/hero/Hero.ts#L30-L60)
## 性能考虑
### ECS架构优势
1. **组件化设计**: Hero实体采用ECS架构避免了传统继承层次的复杂性
2. **内存优化**: 通过组件池复用Hero实体减少内存分配开销
3. **系统解耦**: 各组件职责单一,便于维护和扩展
### 事件处理优化
1. **事件监听**: 使用事件系统解耦组件间的直接依赖
2. **延迟处理**: 通过定时器控制英雄召唤间隔
3. **状态管理**: 通过SMC单例集中管理全局状态
### 渲染性能
1. **批量操作**: 批量处理英雄位置和属性更新
2. **组件缓存**: 缓存HeroViewComp等常用组件引用
3. **条件渲染**: 根据战斗状态动态启用/禁用组件
## 故障排除指南
### 常见问题及解决方案
| 问题类型 | 症状描述 | 可能原因 | 解决方案 |
|---------|---------|---------|---------|
| 英雄不出现 | 战斗开始后没有英雄 | fight_hero配置错误 | 检查smc.fight_hero设置 |
| 英雄位置错误 | 英雄出现在错误位置 | HeroPos配置问题 | 验证HeroPos数组配置 |
| 英雄属性异常 | 英雄属性显示错误 | HeroInfo配置缺失 | 检查HeroInfo中的英雄数据 |
| 事件不响应 | Zhaohuan事件无效 | 事件监听未注册 | 确认on方法调用 |
### 调试技巧
1. **日志输出**: 启用注释掉的日志语句进行调试
2. **断点调试**: 在关键方法设置断点观察变量状态
3. **状态检查**: 通过浏览器开发者工具检查SMC状态
**章节来源**
- [MissionHeroComp.ts](file://assets/script/game/map/MissionHeroComp.ts#L32-L70)
## 总结
MissionHeroCompComp类通过精心设计的ECS架构和事件驱动机制实现了完整的英雄生命周期管理。该系统具有以下核心优势
1. **模块化设计**: 清晰的职责分离和组件化架构
2. **事件驱动**: 基于事件系统的松耦合设计
3. **数据绑定**: 与UI层的无缝数据同步
4. **扩展性强**: 预留的扩展点支持未来功能增强
5. **性能优化**: 通过ECS架构实现高效的组件管理
该英雄管理系统为游戏战斗提供了稳定可靠的基础框架,支持动态英雄召唤、战斗状态管理和资源回收等功能,是整个战斗系统的重要组成部分。