435 lines
13 KiB
Markdown
435 lines
13 KiB
Markdown
# 怪物配置体系
|
||
|
||
<cite>
|
||
**本文档引用的文件**
|
||
- [RogueConfig.ts](file://assets/script/game/map/RogueConfig.ts)
|
||
- [Mon.ts](file://assets/script/game/hero/Mon.ts)
|
||
- [heroSet.ts](file://assets/script/game/common/config/heroSet.ts)
|
||
- [MissionMonComp.ts](file://assets/script/game/map/MissionMonComp.ts)
|
||
- [SkillSet.ts](file://assets/script/game/common/config/SkillSet.ts)
|
||
- [HeroAttrs.ts](file://assets/script/game/common/config/HeroAttrs.ts)
|
||
</cite>
|
||
|
||
## 目录
|
||
1. [概述](#概述)
|
||
2. [项目结构](#项目结构)
|
||
3. [核心组件](#核心组件)
|
||
4. [架构概览](#架构概览)
|
||
5. [详细组件分析](#详细组件分析)
|
||
6. [依赖关系分析](#依赖关系分析)
|
||
7. [性能考虑](#性能考虑)
|
||
8. [故障排除指南](#故障排除指南)
|
||
9. [结论](#结论)
|
||
|
||
## 概述
|
||
|
||
RogueConfig.ts是肉鸽模式中的核心怪物配置管理系统,提供了完整的怪物类型定义、关卡配置规则、强度计算机制和随机事件系统。该系统通过分层的配置结构实现了怪物的差异化管理,支持普通怪物、精英怪物和Boss怪物三种类型,并能够根据关卡进度动态调整怪物数量和强度。
|
||
|
||
系统的主要功能包括:
|
||
- **怪物类型管理**:通过MonsterType枚举定义三种怪物类型
|
||
- **关卡配置系统**:支持普通关卡、精英关卡、Boss关卡和事件关卡
|
||
- **强度计算引擎**:基于关卡号和等级计算怪物强度倍率
|
||
- **随机事件系统**:提供宝箱、陷阱、增益和减益事件
|
||
- **程序化关卡生成**:支持怪物数量随关卡递增的动态配置
|
||
|
||
## 项目结构
|
||
|
||
```mermaid
|
||
graph TB
|
||
subgraph "怪物配置模块"
|
||
RC[RogueConfig.ts<br/>核心配置管理]
|
||
MC[MissionMonComp.ts<br/>怪物生成控制]
|
||
end
|
||
subgraph "数据源模块"
|
||
HS[heroSet.ts<br/>英雄/怪物数据]
|
||
Mon[Mon.ts<br/>怪物实体管理]
|
||
end
|
||
subgraph "配置系统"
|
||
SC[StageConfigRules<br/>关卡配置规则]
|
||
EM[EliteMonsterList<br/>精英怪物配置]
|
||
BM[BossMonsterList<br/>Boss怪物配置]
|
||
end
|
||
RC --> SC
|
||
RC --> EM
|
||
RC --> BM
|
||
MC --> RC
|
||
MC --> Mon
|
||
Mon --> HS
|
||
```
|
||
|
||
**图表来源**
|
||
- [RogueConfig.ts](file://assets/script/game/map/RogueConfig.ts#L1-L311)
|
||
- [MissionMonComp.ts](file://assets/script/game/map/MissionMonComp.ts#L1-L209)
|
||
|
||
**章节来源**
|
||
- [RogueConfig.ts](file://assets/script/game/map/RogueConfig.ts#L1-L50)
|
||
- [MissionMonComp.ts](file://assets/script/game/map/MissionMonComp.ts#L1-L35)
|
||
|
||
## 核心组件
|
||
|
||
### 怪物类型枚举系统
|
||
|
||
系统定义了三个核心的怪物类型,通过枚举确保类型安全和可维护性:
|
||
|
||
| 怪物类型 | 描述 | 特征 |
|
||
|---------|------|------|
|
||
| NORMAL | 普通怪物 | 基础属性,随机选择 |
|
||
| ELITE | 精英怪物 | 强化配置,固定列表 |
|
||
| BOSS | Boss怪物 | 高强度,特殊配置 |
|
||
|
||
### 关卡类型系统
|
||
|
||
| 关卡类型 | 触发条件 | 怪物组成 |
|
||
|---------|----------|----------|
|
||
| NORMAL | 1-9关1-4级 | 普通怪物为主 |
|
||
| ELITE | 1-9关5级/10关4级 | 精英+普通怪物 |
|
||
| BOSS | 10关5级 | Boss+精英+普通怪物 |
|
||
| EVENT | 每5关特殊事件 | 少量普通怪物 |
|
||
|
||
**章节来源**
|
||
- [RogueConfig.ts](file://assets/script/game/map/RogueConfig.ts#L35-L55)
|
||
|
||
## 架构概览
|
||
|
||
```mermaid
|
||
sequenceDiagram
|
||
participant Player as 玩家
|
||
participant MC as MissionMonComp
|
||
participant RC as RogueConfig
|
||
participant Mon as Monster
|
||
participant HS as HeroSet
|
||
Player->>MC : 开始关卡
|
||
MC->>RC : getStageType(stage, level)
|
||
RC-->>MC : 返回关卡类型
|
||
MC->>RC : getStageMonsterConfigs(stage, level)
|
||
RC->>RC : calculateMonsterStrengthMultiplier()
|
||
RC->>RC : generateStageConfig()
|
||
RC->>RC : getMonsterUUIDsByType()
|
||
RC-->>MC : 返回怪物配置数组
|
||
MC->>Mon : 创建怪物实例
|
||
Mon->>HS : 加载怪物数据
|
||
HS-->>Mon : 返回属性配置
|
||
Mon-->>MC : 怪物实例完成
|
||
MC-->>Player : 关卡准备就绪
|
||
```
|
||
|
||
**图表来源**
|
||
- [MissionMonComp.ts](file://assets/script/game/map/MissionMonComp.ts#L102-L136)
|
||
- [RogueConfig.ts](file://assets/script/game/map/RogueConfig.ts#L269-L310)
|
||
|
||
## 详细组件分析
|
||
|
||
### 怪物类型管理系统
|
||
|
||
#### MonsterType枚举定义
|
||
|
||
系统通过清晰的枚举定义区分不同类型的怪物:
|
||
|
||
```mermaid
|
||
classDiagram
|
||
class MonsterType {
|
||
<<enumeration>>
|
||
+NORMAL : "normal"
|
||
+ELITE : "elite"
|
||
+BOSS : "boss"
|
||
}
|
||
class StageType {
|
||
<<enumeration>>
|
||
+NORMAL : "normal"
|
||
+ELITE : "elite"
|
||
+BOSS : "boss"
|
||
+EVENT : "event"
|
||
}
|
||
class EventType {
|
||
<<enumeration>>
|
||
+TREASURE : "treasure"
|
||
+TRAP : "trap"
|
||
+BUFF : "buff"
|
||
+DEBUFF : "debuff"
|
||
}
|
||
MonsterType --> StageType : "映射到"
|
||
StageType --> EventType : "可能触发"
|
||
```
|
||
|
||
**图表来源**
|
||
- [RogueConfig.ts](file://assets/script/game/map/RogueConfig.ts#L35-L55)
|
||
|
||
#### 怪物UUID获取机制
|
||
|
||
getMonsterUUIDsByType函数实现了根据不同怪物类型获取对应配置表的功能:
|
||
|
||
```mermaid
|
||
flowchart TD
|
||
Start([开始获取怪物UUID]) --> CheckType{检查怪物类型}
|
||
CheckType --> |NORMAL| GetNormal[调用getMonList获取普通怪物]
|
||
CheckType --> |ELITE| GetElite[使用EliteMonsterList配置表]
|
||
CheckType --> |BOSS| GetBoss[使用BossMonsterList配置表]
|
||
CheckType --> |其他| ReturnEmpty[返回空数组]
|
||
GetNormal --> FilterMonsters[过滤怪物数据]
|
||
FilterMonsters --> ReturnUUIDs[返回UUID数组]
|
||
GetElite --> ReturnEliteUUIDs[返回精英怪物UUID]
|
||
GetBoss --> ReturnBossUUIDs[返回Boss怪物UUID]
|
||
ReturnEmpty --> End([结束])
|
||
ReturnUUIDs --> End
|
||
ReturnEliteUUIDs --> End
|
||
ReturnBossUUIDs --> End
|
||
```
|
||
|
||
**图表来源**
|
||
- [RogueConfig.ts](file://assets/script/game/map/RogueConfig.ts#L225-L247)
|
||
|
||
**章节来源**
|
||
- [RogueConfig.ts](file://assets/script/game/map/RogueConfig.ts#L225-L247)
|
||
|
||
### 关卡配置系统
|
||
|
||
#### StageConfigRules配置表
|
||
|
||
系统通过StageConfigRules定义了四种关卡类型的怪物配置规则:
|
||
|
||
| 关卡类型 | 普通怪物 | 精英怪物 | Boss怪物 | 数量范围 |
|
||
|---------|----------|----------|----------|----------|
|
||
| NORMAL | 3-6只 | 0只 | 0只 | 基础3只递增 |
|
||
| ELITE | 2-5只 | 1-4只 | 0只 | 混合配置 |
|
||
| BOSS | 1-4只 | 1-3只 | 1只 | 高强度组合 |
|
||
| EVENT | 1-4只 | 0只 | 0只 | 少量怪物 |
|
||
|
||
#### 强度计算引擎
|
||
|
||
calculateMonsterStrengthMultiplier函数实现了基于关卡进度的强度倍率计算:
|
||
|
||
```mermaid
|
||
flowchart TD
|
||
Start([开始计算强度倍率]) --> CalcStage[计算关卡倍率<br/>stageMultiplier = 1 + (stage-1) * 0.1]
|
||
CalcStage --> CalcLevel[计算等级倍率<br/>levelMultiplier = 1 + (level-1) * 0.05]
|
||
CalcLevel --> Multiply[相乘得到最终倍率<br/>strengthMultiplier = stageMultiplier * levelMultiplier]
|
||
Multiply --> Return[返回强度倍率]
|
||
Return --> End([结束])
|
||
```
|
||
|
||
**图表来源**
|
||
- [RogueConfig.ts](file://assets/script/game/map/RogueConfig.ts#L175-L180)
|
||
|
||
**章节来源**
|
||
- [RogueConfig.ts](file://assets/script/game/map/RogueConfig.ts#L65-L132)
|
||
- [RogueConfig.ts](file://assets/script/game/map/RogueConfig.ts#L175-L180)
|
||
|
||
### 怪物生成流程
|
||
|
||
#### getStageMonsterConfigs函数详解
|
||
|
||
该函数是怪物配置生成的核心,整合了关卡配置、强度计算和UUID选择:
|
||
|
||
```mermaid
|
||
sequenceDiagram
|
||
participant Caller as 调用者
|
||
participant Func as getStageMonsterConfigs
|
||
participant Gen as generateStageConfig
|
||
participant Calc as calculateMonsterStrengthMultiplier
|
||
participant UUID as getMonsterUUIDsByType
|
||
Caller->>Func : getStageMonsterConfigs(stage, level)
|
||
Func->>Gen : 生成关卡配置
|
||
Gen-->>Func : 返回怪物类型数组
|
||
Func->>Calc : 计算强度倍率
|
||
Calc-->>Func : 返回倍率值
|
||
loop 遍历每个怪物类型
|
||
Func->>UUID : 获取该类型UUID列表
|
||
UUID-->>Func : 返回UUID数组
|
||
Func->>Func : 随机选择UUID
|
||
Func->>Func : 构建怪物配置对象
|
||
end
|
||
Func-->>Caller : 返回完整怪物配置数组
|
||
```
|
||
|
||
**图表来源**
|
||
- [RogueConfig.ts](file://assets/script/game/map/RogueConfig.ts#L269-L310)
|
||
|
||
**章节来源**
|
||
- [RogueConfig.ts](file://assets/script/game/map/RogueConfig.ts#L269-L310)
|
||
|
||
### 怪物数据源关联性
|
||
|
||
#### Mon.ts与heroSet.ts的数据绑定
|
||
|
||
怪物实体通过Mon.ts加载来自heroSet.ts的配置数据:
|
||
|
||
```mermaid
|
||
classDiagram
|
||
class Monster {
|
||
+load(pos, scale, uuid, is_boss, strengthMultiplier)
|
||
+hero_init(uuid, node, scale, box_group, is_boss, is_call, strengthMultiplier)
|
||
-init()
|
||
-destroy()
|
||
}
|
||
class HeroInfo {
|
||
+uuid : number
|
||
+name : string
|
||
+path : string
|
||
+fac : FacSet
|
||
+type : HType
|
||
+hp : number
|
||
+mp : number
|
||
+ap : number
|
||
+def : number
|
||
+skills : number[]
|
||
}
|
||
class MonModelComp {
|
||
+base_hp : number
|
||
+base_mp : number
|
||
+base_ap : number
|
||
+base_def : number
|
||
+strengthMultiplier : number
|
||
}
|
||
Monster --> HeroInfo : "使用数据"
|
||
Monster --> MonModelComp : "包含组件"
|
||
MonModelComp --> HeroInfo : "应用属性"
|
||
```
|
||
|
||
**图表来源**
|
||
- [Mon.ts](file://assets/script/game/hero/Mon.ts#L20-L110)
|
||
- [heroSet.ts](file://assets/script/game/common/config/heroSet.ts#L80-L151)
|
||
|
||
**章节来源**
|
||
- [Mon.ts](file://assets/script/game/hero/Mon.ts#L20-L110)
|
||
- [heroSet.ts](file://assets/script/game/common/config/heroSet.ts#L80-L151)
|
||
|
||
### 随机事件系统
|
||
|
||
#### EventConfig配置表
|
||
|
||
系统提供了完整的随机事件配置,支持四种事件类型:
|
||
|
||
| 事件类型 | 触发概率 | 效果描述 |
|
||
|---------|----------|----------|
|
||
| TREASURE | 30% | 获得额外奖励 |
|
||
| TRAP | 25% | 受到一定伤害 |
|
||
| BUFF | 25% | 获得临时增益效果 |
|
||
| DEBUFF | 20% | 受到临时减益效果 |
|
||
|
||
**章节来源**
|
||
- [RogueConfig.ts](file://assets/script/game/map/RogueConfig.ts#L134-L165)
|
||
|
||
## 依赖关系分析
|
||
|
||
```mermaid
|
||
graph TD
|
||
subgraph "外部依赖"
|
||
ECS[ECS框架]
|
||
Oops[Oops插件框架]
|
||
CC[Cocos Creator]
|
||
end
|
||
subgraph "内部模块"
|
||
RC[RogueConfig]
|
||
MC[MissionMonComp]
|
||
Mon[Monster实体]
|
||
HS[HeroSet]
|
||
end
|
||
subgraph "配置数据"
|
||
HeroInfo[HeroInfo配置]
|
||
SkillSet[SkillSet配置]
|
||
HeroAttrs[HeroAttrs配置]
|
||
end
|
||
RC --> HS
|
||
MC --> RC
|
||
MC --> Mon
|
||
Mon --> HS
|
||
Mon --> HeroInfo
|
||
Mon --> SkillSet
|
||
Mon --> HeroAttrs
|
||
RC -.-> ECS
|
||
MC -.-> Oops
|
||
Mon -.-> CC
|
||
```
|
||
|
||
**图表来源**
|
||
- [RogueConfig.ts](file://assets/script/game/map/RogueConfig.ts#L1-L10)
|
||
- [MissionMonComp.ts](file://assets/script/game/map/MissionMonComp.ts#L1-L15)
|
||
|
||
**章节来源**
|
||
- [RogueConfig.ts](file://assets/script/game/map/RogueConfig.ts#L1-L10)
|
||
- [MissionMonComp.ts](file://assets/script/game/map/MissionMonComp.ts#L1-L15)
|
||
|
||
## 性能考虑
|
||
|
||
### 怪物生成优化策略
|
||
|
||
1. **延迟加载**:怪物实体采用延迟初始化机制,避免一次性加载过多资源
|
||
2. **随机选择优化**:使用Math.random()进行高效随机选择,避免复杂算法
|
||
3. **配置缓存**:关卡配置结果被缓存在MissionMonComp中,减少重复计算
|
||
4. **内存管理**:怪物实体销毁时正确释放组件和资源
|
||
|
||
### 强度计算优化
|
||
|
||
- 使用简单的数学运算替代复杂的属性计算
|
||
- 强度倍率计算结果被缓存,避免重复计算
|
||
- 关卡类型判断采用分支预测友好的条件语句
|
||
|
||
## 故障排除指南
|
||
|
||
### 常见问题及解决方案
|
||
|
||
#### 怪物配置不生效
|
||
|
||
**问题现象**:关卡中没有生成预期的怪物类型
|
||
|
||
**排查步骤**:
|
||
1. 检查EliteMonsterList和BossMonsterList是否包含正确的UUID
|
||
2. 验证getMonsterUUIDsByType函数的返回值
|
||
3. 确认generateStageConfig生成的怪物类型数组
|
||
|
||
**解决方案**:
|
||
- 在heroSet.ts中添加缺失的怪物UUID
|
||
- 检查MonsterType枚举定义是否正确
|
||
- 验证关卡配置规则中的怪物数量设置
|
||
|
||
#### 强度倍率异常
|
||
|
||
**问题现象**:怪物强度不符合预期的增长曲线
|
||
|
||
**排查步骤**:
|
||
1. 检查calculateMonsterStrengthMultiplier函数的计算逻辑
|
||
2. 验证关卡号和等级参数传递是否正确
|
||
3. 确认基础属性值是否合理
|
||
|
||
**解决方案**:
|
||
- 调整关卡倍率和等级倍率的计算公式
|
||
- 检查HeroInfo中的基础属性配置
|
||
- 验证强度倍率的应用逻辑
|
||
|
||
#### 随机事件不触发
|
||
|
||
**问题现象**:事件关卡中没有随机事件发生
|
||
|
||
**排查步骤**:
|
||
1. 检查EventConfig的概率设置
|
||
2. 验证getRandomEvent函数的随机性
|
||
3. 确认事件处理逻辑是否正确
|
||
|
||
**解决方案**:
|
||
- 调整事件概率分布,确保总和为1
|
||
- 检查随机数生成器的实现
|
||
- 验证事件处理函数的调用时机
|
||
|
||
**章节来源**
|
||
- [RogueConfig.ts](file://assets/script/game/map/RogueConfig.ts#L175-L200)
|
||
- [MissionMonComp.ts](file://assets/script/game/map/MissionMonComp.ts#L135-L169)
|
||
|
||
## 结论
|
||
|
||
RogueConfig.ts构建了一个完整而灵活的怪物配置体系,通过分层的设计实现了怪物类型的差异化管理和关卡的程序化生成。系统的三大核心特性——类型管理、强度计算和随机事件——为肉鸽模式提供了丰富的游戏体验。
|
||
|
||
### 主要优势
|
||
|
||
1. **类型安全**:通过枚举确保怪物类型的一致性
|
||
2. **可扩展性**:配置表设计支持轻松添加新怪物类型
|
||
3. **动态平衡**:强度计算机制保证游戏难度的渐进式提升
|
||
4. **随机性**:事件系统增加了游戏的不确定性和趣味性
|
||
|
||
### 改进建议
|
||
|
||
1. **配置验证**:添加配置完整性检查机制
|
||
2. **性能监控**:在大型关卡中监控怪物生成性能
|
||
3. **平衡调整**:提供更精细的强度调节工具
|
||
4. **可视化编辑**:开发关卡配置的可视化编辑器
|
||
|
||
该系统为肉鸽游戏提供了坚实的基础架构,支持开发者根据具体需求进行定制和扩展,是构建高质量肉鸽游戏的重要组件。 |