Files
pixelheros/.qoder/repowiki/zh/content/奖励系统/奖励UI交互/怪物生成与波次控制.md
panw 4235e3b776 refactor(game): 移除已弃用的事件常量
- 删除 UpdateHero 和 UpdateFightHero 事件
- 移除 MISSION_UPDATE 事件常量
- 优化游戏事件枚举定义
2025-10-28 16:15:47 +08:00

13 KiB
Raw Blame History

怪物生成与波次控制

**本文档引用的文件** - [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)

目录

  1. 概述
  2. 系统架构
  3. 核心组件分析
  4. 怪物生成机制
  5. 波次控制逻辑
  6. 随机事件系统
  7. 状态机图示
  8. 性能优化考虑
  9. 故障排除指南
  10. 总结

概述

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

性能优化考虑

内存管理

  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长度和计时器状态

章节来源

总结

MissionMonCompComp实现了一个功能完整且灵活的怪物生成与波次控制系统。该系统具有以下特点

  1. 配置驱动通过RogueConfig实现完全可配置的怪物生成策略
  2. 波次节奏:采用"5+5"模式确保游戏体验的平衡性
  3. 随机事件:集成随机事件系统增加游戏不确定性
  4. 性能优化:采用实体池化和批量处理优化性能
  5. 扩展性强:模块化设计便于功能扩展和维护

该系统为游戏肉鸽模式提供了坚实的怪物生成基础,支持复杂的关卡设计和多样化的游戏体验。通过合理的配置和适当的调整,可以满足不同类型游戏的需求。