13 KiB
13 KiB
怪物生成与波次控制
**本文档引用的文件** - [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)目录
概述
MissionMonCompComp是游戏肉鸽模式中负责怪物生成与波次控制的核心组件。它实现了基于关卡配置的动态怪物生成系统,支持不同类型的怪物(普通、精英、Boss),并采用波次节奏控制机制,每5只怪物后暂停5秒形成波次节奏。
该系统通过RogueConfig提供配置驱动的怪物生成策略,支持怪物强度随关卡递增,同时集成了随机事件系统,为游戏体验增加不确定性。
系统架构
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]
图表来源
核心组件分析
MissionMonCompComp 主控制器
MissionMonCompComp作为主要的怪物生成控制器,维护以下关键状态:
| 状态变量 | 类型 | 描述 |
|---|---|---|
| monsterQueue | Array | 怪物生成队列,存储待生成的怪物配置 |
| isSpawning | boolean | 是否正在生成怪物的状态标志 |
| spawnInterval | number | 单个怪物生成间隔(默认0.1秒) |
| spawnTimer | number | 生成计时器,累积时间用于控制生成节奏 |
| spawnCount | number | 已生成怪物计数器 |
| pauseInterval | number | 波次暂停间隔(默认5秒) |
| isPausing | boolean | 是否处于波次暂停状态 |
| currentEvent | EventType | 当前关卡的随机事件类型 |
| eventProcessed | boolean | 随机事件是否已处理的标志 |
章节来源
RogueConfig 配置系统
RogueConfig提供了完整的配置驱动怪物生成框架:
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
图表来源
章节来源
怪物生成机制
do_mon_wave 方法 - 波次初始化
do_mon_wave方法是波次生成的入口点,负责初始化所有相关状态并启动怪物生成流程:
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]
图表来源
generateMonstersFromStageConfig 方法 - 队列生成
generateMonstersFromStageConfig方法负责解析怪物配置并构建生成队列:
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
图表来源
章节来源
怪物配置结构
每个怪物配置包含以下关键信息:
| 字段 | 类型 | 描述 |
|---|---|---|
| uuid | number | 怪物唯一标识符,对应HeroInfo中的怪物UUID |
| position | number | 怪物生成位置索引(0-4) |
| type | MonsterType | 怪物类型(NORMAL/ELITE/BOSS) |
| level | number | 怪物等级,默认为1 |
| strengthMultiplier | number | 强度倍率,随关卡递增 |
章节来源
波次控制逻辑
定时器系统 - update 方法
update方法实现了精确的波次控制逻辑,每帧更新计时器并管理生成节奏:
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
图表来源
波次节奏控制
波次控制采用"5+5"模式:
- 生成阶段:每0.1秒生成一只怪物,连续生成5只
- 暂停阶段:生成5只后暂停5秒,然后恢复生成
- 计数器:spawnCount跟踪已生成怪物数量
- 状态标志:isPausing控制暂停状态
章节来源
spawnNextMonster 方法 - 怪物实例化
spawnNextMonster方法从队列中取出怪物配置并创建实体:
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 : 更新怪物计数显示
图表来源
章节来源
随机事件系统
事件类型与概率
随机事件系统提供四种不同类型的事件,每种事件都有对应的触发概率:
| 事件类型 | 概率 | 效果 | 处理方式 |
|---|---|---|---|
| TREASURE | 30% | 增加50金币奖励 | 直接修改游戏数据 |
| TRAP | 25% | 对玩家造成伤害 | 需要实现具体伤害逻辑 |
| BUFF | 25% | 给玩家临时增益效果 | 需要实现增益系统 |
| DEBUFF | 20% | 给玩家临时减益效果 | 需要实现减益系统 |
processRandomEvent 方法
processRandomEvent方法根据当前事件类型执行相应的处理逻辑:
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]
图表来源
章节来源
状态机图示
怪物生成状态机
stateDiagram-v2
[*] --> 波次准备
波次准备 --> 事件检测 : do_mon_wave()
事件检测 --> 事件处理 : 是事件关卡
事件检测 --> 怪物生成 : 非事件关卡
事件处理 --> 怪物生成 : 事件已处理
怪物生成 --> 怪物实例化 : 队列非空
怪物实例化 --> 怪物实例化 : 生成间隔到达
怪物实例化 --> 波次暂停 : 达到5只
波次暂停 --> 怪物实例化 : 暂停结束
怪物实例化 --> 波次完成 : 队列为空
波次完成 --> [*]
波次节奏状态机
stateDiagram-v2
[*] --> 生成中
生成中 --> 生成中 : spawnTimer < spawnInterval
生成中 --> 怪物实例化 : spawnTimer >= spawnInterval
怪物实例化 --> 生成中 : spawnCount < 5
怪物实例化 --> 波次暂停 : spawnCount >= 5
波次暂停 --> 波次暂停 : pauseTimer < pauseInterval
波次暂停 --> 生成中 : pauseTimer >= pauseInterval
性能优化考虑
内存管理
- 实体池化:Monster实体通过ecs.getEntity获取,避免频繁创建销毁
- 队列管理:使用shift/pop操作保持队列紧凑
- 资源加载:怪物资源预加载,减少运行时开销
计算优化
- 配置缓存:RogueConfig中的计算结果可适当缓存
- 随机数优化:Math.random()调用频率控制在合理范围内
- 事件概率计算:使用累积概率算法提高效率
渲染优化
- 批量渲染:怪物生成采用批量处理机制
- 层级管理:怪物添加到专门的EntityLayer
- 碰撞体延迟启用:避免过早启用碰撞体影响性能
故障排除指南
常见问题及解决方案
| 问题 | 症状 | 可能原因 | 解决方案 |
|---|---|---|---|
| 怪物不生成 | 队列为空但游戏仍在进行 | 配置错误或事件阻塞 | 检查RogueConfig配置和事件处理 |
| 波次节奏异常 | 怪物生成过快或过慢 | 时间计算错误 | 验证update方法中的计时逻辑 |
| 事件不触发 | 事件关卡没有随机事件 | 概率计算错误 | 检查getRandomEvent函数 |
| 怪物位置错误 | 怪物出现在错误位置 | 位置索引计算错误 | 验证position计算逻辑 |
调试技巧
- 日志记录:启用console.log语句跟踪关键状态变化
- 断点调试:在关键方法设置断点观察变量值
- 状态监控:实时监控monsterQueue长度和计时器状态
章节来源
总结
MissionMonCompComp实现了一个功能完整且灵活的怪物生成与波次控制系统。该系统具有以下特点:
- 配置驱动:通过RogueConfig实现完全可配置的怪物生成策略
- 波次节奏:采用"5+5"模式确保游戏体验的平衡性
- 随机事件:集成随机事件系统增加游戏不确定性
- 性能优化:采用实体池化和批量处理优化性能
- 扩展性强:模块化设计便于功能扩展和维护
该系统为游戏肉鸽模式提供了坚实的怪物生成基础,支持复杂的关卡设计和多样化的游戏体验。通过合理的配置和适当的调整,可以满足不同类型游戏的需求。