wiki更新

This commit is contained in:
panw
2025-10-30 16:49:19 +08:00
parent 40e0086be3
commit 93ceaa70e4
18 changed files with 746 additions and 1100 deletions

View File

@@ -15,14 +15,16 @@
- [MapLayer.ts](file://assets/script/game/map/view/map/layer/MapLayer.ts)
- [EntityLayer.ts](file://assets/script/game/map/view/map/layer/EntityLayer.ts)
- [SkillLayer.ts](file://assets/script/game/map/view/map/layer/SkillLayer.ts)
- [HeroAttrsComp.ts](file://assets/script/game/hero/HeroAttrsComp.ts) - *在最近提交中更新*
- [MonMove.ts](file://assets/script/game/hero/MonMove.ts) - *在最近提交中更新*
- [HeroViewComp.ts](file://assets/script/game/hero/HeroViewComp.ts) - *在最近提交中更新*
</cite>
## 更新摘要
**已更新内容**
- 更新了“随机关卡生成逻辑分析”章节,反映使用 `MonType` 枚举重构的怪物生成系统
- 更新了“怪物实体设计模式分析”章节,以包含新的 `monType``buffs` 参数
- 更新了“依赖分析”图表,反映 `RogueConfig.ts``MissionMonComp.ts`变更
- 新增了“怪物类型与属性计算”章节,详细说明 `MonType` 枚举和 `getMonAttr` 函数
- 更新了“怪物实体设计模式分析”章节,反映使用 `HeroAttrsComp``MonMoveComp` 的重构
- 更新了“依赖分析”图表,反映 `Mon.ts``MissionMonComp.ts` 的变更
- 新增了“怪物属性与移动系统重构”章节,详细说明 `HeroAttrsComp``MonMoveComp`使用
- 所有受影响的代码示例和序列图均已更新
## 目录
@@ -73,7 +75,9 @@ end
end
subgraph "hero"
Mon_ts["Mon.ts"]
MonModelComp_ts["MonModelComp.ts"]
MonMove_ts["MonMove.ts"]
HeroAttrsComp_ts["HeroAttrsComp.ts"]
HeroViewComp_ts["HeroViewComp.ts"]
end
subgraph "common"
subgraph "config"
@@ -225,6 +229,52 @@ GameMap --> MapModelComp : "包含"
- [GameMap.ts](file://assets/script/game/map/GameMap.ts#L1-L35)
- [MapModelComp.ts](file://assets/script/game/map/model/MapModelComp.ts#L1-L42)
### 怪物属性与移动系统重构
根据最近的代码重构,怪物系统已进行重大更新。`Mon.ts`不再使用专用的`MonAttrsComp``MonViewComp`,而是统一使用英雄系统的`HeroAttrsComp``HeroViewComp`,实现了代码复用和逻辑一致性。同时,为怪物创建了专属的`MonMoveComp`移动组件,与英雄系统分离。
#### 重构后组件关系
```mermaid
classDiagram
class Monster {
+HeroModel : HeroAttrsComp
+HeroView : HeroViewComp
+HeroSkills : HeroSkillsComp
+MonMove : MonMoveComp
}
class HeroAttrsComp {
+hero_uuid : number
+lv : number
+hp : number
+mp : number
+Attrs : Array
}
class HeroViewComp {
+scale : number
+box_group : number
}
class MonMoveComp {
+direction : number
+targetX : number
+moving : boolean
}
Monster --> HeroAttrsComp : "使用"
Monster --> HeroViewComp : "使用"
Monster --> MonMoveComp : "使用"
```
**图示来源**
- [Mon.ts](file://assets/script/game/hero/Mon.ts#L1-L131)
- [HeroAttrsComp.ts](file://assets/script/game/hero/HeroAttrsComp.ts#L7-L380)
- [HeroViewComp.ts](file://assets/script/game/hero/HeroViewComp.ts#L24-L404)
- [MonMove.ts](file://assets/script/game/hero/MonMove.ts#L8-L22)
**本节来源**
- [Mon.ts](file://assets/script/game/hero/Mon.ts#L1-L131)
- [HeroAttrsComp.ts](file://assets/script/game/hero/HeroAttrsComp.ts#L7-L380)
- [HeroViewComp.ts](file://assets/script/game/hero/HeroViewComp.ts#L24-L404)
- [MonMove.ts](file://assets/script/game/hero/MonMove.ts#L8-L22)
### 怪物类型与属性计算
`RogueConfig.ts`文件引入了`MonType`枚举来定义怪物类型,取代了原有的布尔标记。`MonType`包含`NORMAL`(普通)、`ELITE`(精英)和`BOSS`(首领)三种类型。系统通过`MonAttrSet`配置表为不同类型的怪物设置属性倍率。`getMonAttr`函数根据怪物等级、UUID和类型计算最终属性值确保精英和Boss怪物具有更高的生命值、攻击力和防御力。
@@ -282,7 +332,7 @@ end
### 怪物实体设计模式分析
`Mon.ts`文件定义了`Monster`代表游戏中的怪物实体。该类基于ECS架构包含`HeroModel`(模型组件)、`HeroView`(视图组件)和`BattleMove`战斗移动组件)。`load`方法的签名已更新,增加了`monType``buffs`参数。该方法调用`getMonAttr`函数根据关卡等级和怪物类型计算属性,并将这些属性传递给`hero_init`方法进行初始化。怪物的技能、属性和状态均在此方法中初始化。
`Mon.ts`文件定义了`Monster`代表游戏中的怪物实体。该类基于ECS架构包含`HeroModel`(模型组件)、`HeroView`(视图组件)和`MonMove`专属移动组件)。`load`方法的签名已更新,增加了`monType``buffs`参数。该方法调用`getMonAttr`函数根据关卡等级和怪物类型计算属性,并将这些属性传递给`hero_init`方法进行初始化。怪物的技能、属性和状态均在此方法中初始化。
#### 复杂逻辑组件
```mermaid
@@ -297,7 +347,7 @@ GetHeroInfo --> CalculateAttrs["调用getMonAttr计算最终属性"]
CalculateAttrs --> ApplyBuffs["应用buffs数组"]
ApplyBuffs --> InitSkills["初始化技能数组"]
InitSkills --> AddComponent["将HeroViewComp添加到实体"]
AddComponent --> SetMove["设置BattleMove参数"]
AddComponent --> SetMove["设置MonMove参数"]
SetMove --> Dispatch["派发monster_load事件"]
Dispatch --> End([怪物加载完成])
```
@@ -388,7 +438,9 @@ MapViewScene_ts --> EntityLayer_ts
MapViewScene_ts --> SkillLayer_ts
MissionMonComp_ts --> RogueConfig_ts
MissionMonComp_ts --> Mon_ts
Mon_ts --> heroSet_ts
Mon_ts --> HeroAttrsComp_ts
Mon_ts --> HeroViewComp_ts
Mon_ts --> MonMove_ts
RogueConfig_ts --> heroSet_ts
```
@@ -402,7 +454,10 @@ RogueConfig_ts --> heroSet_ts
- [SkillLayer.ts](file://assets/script/game/map/view/map/layer/SkillLayer.ts#L1-L47)
- [MissionMonComp.ts](file://assets/script/game/map/MissionMonComp.ts#L1-L239)
- [RogueConfig.ts](file://assets/script/game/map/RogueConfig.ts#L1-L310)
- [Mon.ts](file://assets/script/game/hero/Mon.ts#L1-L108)
- [Mon.ts](file://assets/script/game/hero/Mon.ts#L1-L131)
- [HeroAttrsComp.ts](file://assets/script/game/hero/HeroAttrsComp.ts#L7-L380)
- [HeroViewComp.ts](file://assets/script/game/hero/HeroViewComp.ts#L24-L404)
- [MonMove.ts](file://assets/script/game/hero/MonMove.ts#L8-L22)
- [heroSet.ts](file://assets/script/game/common/config/heroSet.ts#L1-L151)
**本节来源**
@@ -415,7 +470,10 @@ RogueConfig_ts --> heroSet_ts
- [SkillLayer.ts](file://assets/script/game/map/view/map/layer/SkillLayer.ts#L1-L47)
- [MissionMonComp.ts](file://assets/script/game/map/MissionMonComp.ts#L1-L239)
- [RogueConfig.ts](file://assets/script/game/map/RogueConfig.ts#L1-L310)
- [Mon.ts](file://assets/script/game/hero/Mon.ts#L1-L108)
- [Mon.ts](file://assets/script/game/hero/Mon.ts#L1-L131)
- [HeroAttrsComp.ts](file://assets/script/game/hero/HeroAttrsComp.ts#L7-L380)
- [HeroViewComp.ts](file://assets/script/game/hero/HeroViewComp.ts#L24-L404)
- [MonMove.ts](file://assets/script/game/hero/MonMove.ts#L8-L22)
- [heroSet.ts](file://assets/script/game/common/config/heroSet.ts#L1-L151)
## 性能考虑
@@ -430,7 +488,7 @@ RogueConfig_ts --> heroSet_ts
**本节来源**
- [GameMap.ts](file://assets/script/game/map/GameMap.ts#L1-L35)
- [MissionMonComp.ts](file://assets/script/game/map/MissionMonComp.ts#L1-L239)
- [Mon.ts](file://assets/script/game/hero/Mon.ts#L1-L108)
- [Mon.ts](file://assets/script/game/hero/Mon.ts#L1-L131)
- [map_delivery.json](file://assets/resources/config/map/map_delivery.json#L1-L29)
## 结论

View File

@@ -3,16 +3,17 @@
<cite>
**本文档引用的文件**
- [Mon.ts](file://assets/script/game/hero/Mon.ts) - *在最近的提交中更新*
- [HeroAttrsComp.ts](file://assets/script/game/hero/HeroAttrsComp.ts) - *新增并替代旧的属性组件*
- [HeroAttrs.ts](file://assets/script/game/common/config/HeroAttrs.ts) - *在最近的提交中更新*
- [heroSet.ts](file://assets/script/game/common/config/heroSet.ts) - *在最近的提交中更新*
- [RogueConfig.ts](file://assets/script/game/map/RogueConfig.ts) - *新增怪物类型与难度配置*
- [BattleMoveComp.ts](file://assets/script/game/common/ecs/position/BattleMoveComp.ts) - *移动行为控制组件*
- [MonMove.ts](file://assets/script/game/hero/MonMove.ts) - *移动行为控制组件*
- [HeroViewComp.ts](file://assets/script/game/hero/HeroViewComp.ts) - *视图与属性管理组件*
</cite>
## 更新摘要
**变更内容**
- 更新了 `Mon.ts` 中的 `load``hero_init` 方法以支持 `monType` 参数和等级系统
- 重构 `Mon.ts` 中的组件依赖,移除 `MonAttrsComp``MonViewComp`,统一使用 `HeroAttrsComp``HeroViewComp`
- 引入 `MonType` 枚举普通、精英、BOSS实现差异化属性计算
- 新增 `getMonAttr` 函数用于根据等级和类型动态计算怪物属性
- 扩展 `heroSet.ts` 添加多种新怪物类型(召唤师、治疗者、光环怪等)
@@ -32,7 +33,7 @@
## 简介
`Mon.ts` 文件定义了游戏中的怪物系统,采用 ECSEntity-Component-System)架构模式,通过继承 `Entity` 类并注册为 `Monster` 类型来实现怪物实体的管理和控制。该系统提供了完整的怪物生命周期管理,包括预制体动态加载、位置设置、基于等级和类型的属性初始化以及向左移动的行为控制。本次重构引入了 `monType` 参数支持普通、精英、BOSS 三种类型,并通过 `RogueConfig.ts` 中的 `getMonAttr` 函数实现了基于等级和类型系数的动态属性计算,取代了原有的 `strengthMultiplier` 机制,使难度曲线更加平滑和可配置。
`Mon.ts` 文件定义了游戏中的怪物系统,采用 ECS实体-组件-系统)架构模式,通过继承 `Entity` 类并注册为 `Monster` 类型来实现怪物实体的管理和控制。该系统提供了完整的怪物生命周期管理,包括预制体动态加载、位置设置、基于等级和类型的属性初始化以及向左移动的行为控制。本次重构引入了 `monType` 参数支持普通、精英、BOSS 三种类型,并通过 `RogueConfig.ts` 中的 `getMonAttr` 函数实现了基于等级和类型系数的动态属性计算,取代了原有的 `strengthMultiplier` 机制,使难度曲线更加平滑和可配置。同时,系统已统一使用英雄的 `HeroAttrsComp` 组件,实现了英雄与怪物之间的数据与逻辑复用,提升了代码一致性与可维护性。
## 项目结构
@@ -42,8 +43,8 @@
graph TB
subgraph "怪物系统模块"
Mon[Mon.ts<br/>怪物实体类]
MonModel[MonModelComp.ts<br/>怪物模型组件]
BattleMove[BattleMoveComp.ts<br/>移动组件]
MonModel[HeroAttrsComp.ts<br/>属性与模型组件]
BattleMove[MonMove.ts<br/>移动组件]
end
subgraph "配置系统"
HeroSet[heroSet.ts<br/>英雄与怪物配置]
@@ -51,7 +52,7 @@ HeroAttrs[HeroAttrs.ts<br/>属性配置]
RogueConfig[RogueConfig.ts<br/>肉鸽模式配置]
end
subgraph "ECS系统"
BattleMoveSys[BattleMoveSystem.ts<br/>移动系统]
BattleMoveSys[MonMoveSystem.ts<br/>移动系统]
end
Mon --> MonModel
Mon --> BattleMove
@@ -63,8 +64,8 @@ BattleMoveSys --> BattleMove
**图表来源**
- [Mon.ts](file://assets/script/game/hero/Mon.ts#L1-L109)
- [MonModelComp.ts](file://assets/script/game/hero/MonModelComp.ts#L1-L20)
- [BattleMoveComp.ts](file://assets/script/game/common/ecs/position/BattleMoveComp.ts#L1-L16)
- [HeroAttrsComp.ts](file://assets/script/game/hero/HeroAttrsComp.ts#L1-L20)
- [MonMove.ts](file://assets/script/game/hero/MonMove.ts#L1-L16)
- [RogueConfig.ts](file://assets/script/game/map/RogueConfig.ts#L31-L88)
**章节来源**
@@ -78,14 +79,14 @@ BattleMoveSys --> BattleMove
`Monster` 类是怪物系统的核心实体类,继承自 ECS 框架的 `Entity` 基类,并注册为 `Monster` 类型。该类实现了怪物的完整生命周期管理:
- **组件管理**:在 `init` 方法中自动添加 `BattleMoveComp``MonModelComp``TalComp` 组件
- **组件管理**:在 `init` 方法中自动添加 `MonMoveComp``HeroAttrsComp``HeroSkillsComp` 组件
- **生命周期控制**:提供 `init``destroy` 方法管理实体状态,在 `destroy` 中移除关键组件
- **预制体加载**:通过 `load` 方法动态加载怪物预制体,并传入 `uuid``lv`(等级)、`monType`(怪物类型)等参数
- **属性初始化**:通过 `hero_init` 方法设置怪物基础属性,该方法现在依赖 `RogueConfig.getMonAttr` 进行计算
- **属性初始化**:通过 `load` 方法中的逻辑设置怪物基础属性,该方法现在依赖 `RogueConfig.getMonAttr` 进行计算,并直接使用 `HeroAttrsComp` 统一管理属性
### BattleMoveComp移动组件
### MonMoveComp移动组件
`BattleMoveComp` 负责控制怪物的移动行为,包含以下关键属性:
`MonMoveComp` 负责控制怪物的移动行为,包含以下关键属性:
- **direction**移动方向1向右-1向左
- **targetX**目标X坐标
@@ -101,12 +102,12 @@ BattleMoveSys --> BattleMove
- **百分比属性**:暴击率、闪避率等百分比型属性
- **特殊属性**:吸血、燃烧概率等特殊效果属性
属性值存储在 `HeroViewComp``Attrs``NeAttrs` 对象中,并通过 `initAttrs` 方法进行初始化和计算。
属性值存储在 `HeroAttrsComp``Attrs``NeAttrs` 对象中,并通过 `initAttrs` 方法进行初始化和计算。此设计实现了英雄与怪物共用同一套属性组件,极大提升了代码复用率。
**章节来源**
- [Mon.ts](file://assets/script/game/hero/Mon.ts#L17-L40)
- [BattleMoveComp.ts](file://assets/script/game/common/ecs/position/BattleMoveComp.ts#L3-L15)
- [HeroViewComp.ts](file://assets/script/game/hero/HeroViewComp.ts#L72-L778)
- [MonMove.ts](file://assets/script/game/hero/MonMove.ts#L3-L15)
- [HeroAttrsComp.ts](file://assets/script/game/hero/HeroAttrsComp.ts#L72-L778)
## 架构概览
@@ -115,50 +116,45 @@ BattleMoveSys --> BattleMove
```mermaid
classDiagram
class Monster {
+MonModelComp HeroModel
+HeroAttrsComp HeroModel
+HeroViewComp HeroView
+BattleMoveComp BattleMove
+MonMoveComp MonMove
+init() void
+destroy() void
+load(pos, scale, uuid, lv, monType, buffs, is_call) void
+hero_init(uuid, node, scale, box_group, lv, monType, buffs, is_call) void
}
class BattleMoveComp {
class MonMoveComp {
+number direction
+number targetX
+boolean moving
+reset() void
}
class MonModelComp {
+reset() void
}
class HeroViewComp {
+number scale
+FacSet fac
+HType type
+boolean is_boss
+number box_group
class HeroAttrsComp {
+number hero_uuid
+string hero_name
+number base_hp
+number base_mp
+number base_ap
+number base_def
+number lv
+number type
+number fac
+number hp
+number mp
+object Attrs
+object skills
+object NeAttrs
+initAttrs() void
}
Monster --> BattleMoveComp : "包含"
Monster --> MonModelComp : "包含"
class HeroViewComp {
+number scale
+number box_group
+init() void
}
Monster --> MonMoveComp : "包含"
Monster --> HeroAttrsComp : "包含"
Monster --> HeroViewComp : "包含"
```
**图表来源**
- [Mon.ts](file://assets/script/game/hero/Mon.ts#L17-L40)
- [BattleMoveComp.ts](file://assets/script/game/common/ecs/position/BattleMoveComp.ts#L3-L15)
- [MonModelComp.ts](file://assets/script/game/hero/MonModelComp.ts#L10-L19)
- [MonMove.ts](file://assets/script/game/hero/MonMove.ts#L3-L15)
- [HeroAttrsComp.ts](file://assets/script/game/hero/HeroAttrsComp.ts#L72-L778)
- [HeroViewComp.ts](file://assets/script/game/hero/HeroViewComp.ts#L72-L778)
## 详细组件分析
@@ -173,17 +169,17 @@ participant Client as "调用方"
participant Monster as "Monster实体"
participant Resources as "资源系统"
participant Scene as "场景节点"
participant BattleMove as "BattleMove组件"
participant MonMove as "MonMove组件"
Client->>Monster : load(pos, scale, uuid, lv, monType, ...)
Monster->>Resources : 获取预制体路径
Resources-->>Monster : 返回Prefab资源
Monster->>Scene : 实例化预制体
Scene-->>Monster : 返回Node节点
Monster->>Monster : 设置位置和缩放
Monster->>Monster : hero_init初始化属性
Monster->>BattleMove : 设置移动参数
BattleMove->>BattleMove : direction = -1
BattleMove->>BattleMove : targetX = -800
Monster->>Monster : 初始化属性
Monster->>MonMove : 设置移动参数
MonMove->>MonMove : direction = -1
MonMove->>MonMove : targetX = -800
Monster->>Client : dispatchEvent("monster_load")
```
@@ -197,15 +193,16 @@ Monster->>Client : dispatchEvent("monster_load")
3. **场景集成**:将实例化的节点添加到场景的 `entityLayer`
4. **碰撞体管理**:先禁用碰撞体,延迟一帧再启用以避免初始化问题
5. **位置设置**:根据传入的 `pos` 参数设置怪物初始位置
6. **属性初始化**:调用 `hero_init` 方法,传入 `lv``monType` 进行属性计算
7. **移动初始化**设置 `BattleMoveComp` 的方向和目标
6. **属性初始化**:调用 `getMonAttr` 计算属性,并赋值给 `HeroAttrsComp`
7. **技能初始化**通过 `HeroSkillsComp.initSkills` 加载技能配置
8. **移动初始化**:设置 `MonMoveComp` 的方向和目标
**章节来源**
- [Mon.ts](file://assets/script/game/hero/Mon.ts#L35-L58)
### hero_init方法:基于等级与类型的属性系统
### 属性初始化:基于等级与类型的属性系统
`hero_init` 方法实现了基于 `lv`(等级)和 `monType`(怪物类型)的属性调整,取代了旧的 `strengthMultiplier` 机制:
`load` 方法实现了基于 `lv`(等级)和 `monType`(怪物类型)的属性调整,取代了旧的 `strengthMultiplier` 机制:
```mermaid
flowchart TD
@@ -238,7 +235,7 @@ style CalcAttr fill:#fff3e0
2. **技能系统集成**
- 遍历 `hero.skills` 数组
- 从 `SkillSet` 配置中获取技能详细信息
- 创建技能对象并添加到 `hv.skills` 数组
- 创建技能对象并添加到 `HeroSkillsComp`
3. **属性系统初始化**
- 调用 `getAttrs()` 获取默认属性值
@@ -249,9 +246,9 @@ style CalcAttr fill:#fff3e0
- [Mon.ts](file://assets/script/game/hero/Mon.ts#L60-L91)
- [RogueConfig.ts](file://assets/script/game/map/RogueConfig.ts#L79-L88)
### BattleMoveComp组件移动行为控制
### MonMoveComp组件移动行为控制
`BattleMoveComp` 组件驱动怪物向左移动的行为:
`MonMoveComp` 组件驱动怪物向左移动的行为:
```mermaid
stateDiagram-v2
@@ -265,8 +262,8 @@ note right of Moving : direction = -1<br/>targetX = -800
```
**图表来源**
- [BattleMoveComp.ts](file://assets/script/game/common/ecs/position/BattleMoveComp.ts#L3-L15)
- [BattleMoveSystem.ts](file://assets/script/game/common/ecs/position/BattleMoveSystem.ts#L10-L271)
- [MonMove.ts](file://assets/script/game/hero/MonMove.ts#L3-L15)
- [MonMoveSystem.ts](file://assets/script/game/hero/MonMove.ts#L10-L271)
#### 移动参数配置:
@@ -275,7 +272,7 @@ note right of Moving : direction = -1<br/>targetX = -800
- **moving = true**:启用移动状态
**章节来源**
- [BattleMoveComp.ts](file://assets/script/game/common/ecs/position/BattleMoveComp.ts#L3-L15)
- [MonMove.ts](file://assets/script/game/hero/MonMove.ts#L3-L15)
### 数据复用机制HeroAttrs与heroSet配置
@@ -321,8 +318,9 @@ Oops[Oops插件框架]
end
subgraph "核心模块"
Monster[Monster实体]
BattleMove[BattleMove组件]
MonMove[MonMove组件]
HeroView[HeroView组件]
HeroAttrs[HeroAttrs组件]
end
subgraph "配置模块"
HeroInfo[HeroInfo配置]
@@ -331,37 +329,38 @@ SkillSet[技能配置]
RogueConfig[肉鸽配置]
end
subgraph "系统模块"
BattleMoveSys[BattleMoveSystem]
MonMoveSystem[MonMoveSystem]
SingletonModule[单例模块]
end
Monster --> ECS
Monster --> CC
Monster --> Oops
Monster --> BattleMove
Monster --> MonMove
Monster --> HeroAttrs
Monster --> HeroView
Monster --> HeroInfo
Monster --> HeroAttrs
Monster --> SkillSet
Monster --> RogueConfig
BattleMoveSys --> BattleMove
BattleMoveSys --> HeroView
MonMoveSystem --> MonMove
MonMoveSystem --> HeroAttrs
SingletonModule --> Monster
```
**图表来源**
- [Mon.ts](file://assets/script/game/hero/Mon.ts#L1-L15)
- [BattleMoveSystem.ts](file://assets/script/game/common/ecs/position/BattleMoveSystem.ts#L1-L10)
- [MonMoveSystem.ts](file://assets/script/game/hero/MonMove.ts#L1-L10)
### 关键依赖说明:
1. **ECS框架依赖**`Monster` 类继承自 `ecs.Entity``BattleMoveComp` 继承自 `ecs.Comp`
1. **ECS框架依赖**`Monster` 类继承自 `ecs.Entity``MonMoveComp` 继承自 `ecs.Comp`
2. **Cocos Creator依赖**:使用 `Node`、`Prefab`、`Vec3` 等 Cocos 类型
3. **配置依赖**:依赖 `HeroInfo`、`HeroAttrs`、`SkillSet`、`RogueConfig` 等配置模块
4. **系统依赖**:依赖 `BattleMoveSystem` 进行移动逻辑处理
4. **系统依赖**:依赖 `MonMoveSystem` 进行移动逻辑处理
**章节来源**
- [Mon.ts](file://assets/script/game/hero/Mon.ts#L1-L15)
- [BattleMoveSystem.ts](file://assets/script/game/common/ecs/position/BattleMoveSystem.ts#L1-L10)
- [MonMoveSystem.ts](file://assets/script/game/hero/MonMove.ts#L1-L10)
## 性能考虑
@@ -373,7 +372,7 @@ SingletonModule --> Monster
### 性能优化策略
1. **批量更新**`BattleMoveSystem` 采用批量处理方式
1. **批量更新**`MonMoveSystem` 采用批量处理方式
2. **条件检查**:在更新前进行状态检查,避免不必要的计算
3. **边界检测**:使用 `validatePosition` 方法限制移动范围
@@ -381,7 +380,7 @@ SingletonModule --> Monster
1. **配置驱动**:通过 `heroSet.ts` 和 `RogueConfig.ts` 控制怪物属性和行为
2. **组件扩展**:支持添加新的组件类型(如 `BuffComp`、`TalComp`
3. **系统扩展**`BattleMoveSystem` 可添加新的移动逻辑
3. **系统扩展**`MonMoveSystem` 可添加新的移动逻辑
## 故障排除指南
@@ -392,14 +391,14 @@ SingletonModule --> Monster
**问题现象**:怪物加载后静止不动
**排查步骤**
- 检查 `BattleMoveComp` 的 `moving` 属性是否为 `true`
- 检查 `MonMoveComp` 的 `moving` 属性是否为 `true`
- 验证 `targetX` 设置是否合理
- 确认 `BattleMoveSystem` 是否正常运行
- 确认 `MonMoveSystem` 是否正常运行
**解决方案**
```typescript
// 确保移动组件正确初始化
const move = this.get(BattleMoveComp);
const move = this.get(MonMoveComp);
move.moving = true;
move.targetX = -800; // 设置合理的边界值
```
@@ -440,7 +439,7 @@ var prefab: Prefab = oops.res.get(path, Prefab)!;
**章节来源**
- [Mon.ts](file://assets/script/game/hero/Mon.ts#L35-L58)
- [BattleMoveSystem.ts](file://assets/script/game/common/ecs/position/BattleMoveSystem.ts#L10-L50)
- [MonMoveSystem.ts](file://assets/script/game/hero/MonMove.ts#L10-L50)
## 结论
@@ -448,7 +447,7 @@ var prefab: Prefab = oops.res.get(path, Prefab)!;
1. **ECS架构优势**:通过组件化设计实现了职责分离和代码复用
2. **难度自适应**:基于 `lv` 和 `monType` 的属性调整机制提供了灵活的难度控制
3. **数据复用**:通过 `HeroAttrs` 和 `heroSet` 配置系统实现了数据的集中管理
3. **数据复用**:通过 `HeroAttrsComp` 统一管理英雄与怪物属性,实现逻辑一致性
4. **性能优化**:采用组件化和批量处理策略确保良好的运行性能
5. **扩展性强**:支持添加新怪物类型、配置技能组合和实现召唤单位等扩展需求

View File

@@ -2,20 +2,17 @@
<cite>
**本文档引用的文件**
- [RogueConfig.ts](file://assets/script/game/map/RogueConfig.ts) - *在最近提交中更新*
- [MissionMonComp.ts](file://assets/script/game/map/MissionMonComp.ts) - *在最近提交中更新*
- [heroSet.ts](file://assets/script/game/common/config/heroSet.ts) - *在最近提交中更新*
- [SkillSet.ts](file://assets/script/game/common/config/SkillSet.ts)
- [GameMap.ts](file://assets/script/game/map/GameMap.ts)
- [RogueConfig.ts](file://assets\script\game\map\RogueConfig.ts) - *在最近提交中更新*
- [GameMap.ts](file://assets\script\game\map\GameMap.ts) - *在最近提交中更新*
</cite>
## 更新摘要
**已做更改**
- 全面重构关卡生成逻辑,采用新的 `MonType` 枚举替代旧的布尔标记
- 更新关卡类型判断机制,基于 `EliteStage``BossStage` 数组配置
- 重写怪物属性计算系统,引入 `MonAttrSet` 属性倍率配置
- 更新随机事件系统,使用数字枚举值替代字符串
- 同步更新调用流程和配置结构
- 全面重构怪物类型与属性计算系统,引入 `MonType` 枚举和动态属性计算机制
- 更新关卡类型判断逻辑,基于 `EliteStage``BossStage` 数组进行判定
- 重写怪物属性计算函数 `getMonAttr`,实现基于等级、类型和基础属性的动态计算
- 优化关卡生成流程 `getStageMonConfigs`,增强代码可读性和维护性
- 同步更新文档以准确反映最新代码实现
## 目录
1. [系统概述](#系统概述)
@@ -46,8 +43,8 @@
**更新** 重构了怪物生成逻辑,使用 `MonType` 枚举和数组配置替代原有实现
**章节来源**
- [RogueConfig.ts](file://assets/script/game/map/RogueConfig.ts#L1-L50)
- [MissionMonComp.ts](file://assets/script/game/map/MissionMonComp.ts#L1-L40)
- [RogueConfig.ts](file://assets\script\game\map\RogueConfig.ts#L1-L50)
- [GameMap.ts](file://assets\script\game\map\GameMap.ts#L1-L35)
## 核心架构
@@ -67,19 +64,16 @@ F --> J[Boss怪物添加]
F --> K[额外怪物生成]
end
subgraph "应用层"
L[MissionMonComp.ts] --> M[GameMap.ts]
L --> N[Mon.ts]
L --> O[MapModelComp.ts]
L[GameMap.ts] --> M[MapModelComp]
L --> N[MapViewComp]
end
A --> F
F --> L
M --> O
```
**图表来源**
- [RogueConfig.ts](file://assets/script/game/map/RogueConfig.ts#L1-L173)
- [MissionMonComp.ts](file://assets/script/game/map/MissionMonComp.ts#L1-L200)
- [GameMap.ts](file://assets/script/game/map/GameMap.ts#L1-L35)
- [RogueConfig.ts](file://assets\script\game\map\RogueConfig.ts#L1-L173)
- [GameMap.ts](file://assets\script\game\map\GameMap.ts#L1-L35)
## 关卡类型系统
@@ -111,7 +105,7 @@ IMonsConfig --> StageConfig : "生成"
```
**图表来源**
- [RogueConfig.ts](file://assets/script/game/map/RogueConfig.ts#L31-L31)
- [RogueConfig.ts](file://assets\script\game\map\RogueConfig.ts#L31-L31)
### 关卡类型特征对比
@@ -122,8 +116,8 @@ IMonsConfig --> StageConfig : "生成"
| Boss关卡 | 关卡号在BossStage数组中 | Boss+精英+普通怪物 | 高难度包含Boss |
**章节来源**
- [RogueConfig.ts](file://assets/script/game/map/RogueConfig.ts#L18-L20)
- [RogueConfig.ts](file://assets/script/game/map/RogueConfig.ts#L31-L31)
- [RogueConfig.ts](file://assets\script\game\map\RogueConfig.ts#L18-L20)
- [RogueConfig.ts](file://assets\script\game\map\RogueConfig.ts#L31-L31)
## 怪物类型体系
@@ -156,8 +150,8 @@ MonsterPool --> MonsterConfig : "包含"
```
**图表来源**
- [RogueConfig.ts](file://assets/script/game/map/RogueConfig.ts#L31-L31)
- [RogueConfig.ts](file://assets/script/game/map/RogueConfig.ts#L18-L20)
- [RogueConfig.ts](file://assets\script\game\map\RogueConfig.ts#L31-L31)
- [RogueConfig.ts](file://assets\script\game\map\RogueConfig.ts#L18-L20)
### 怪物池配置
@@ -168,8 +162,8 @@ MonsterPool --> MonsterConfig : "包含"
- **Boss怪物池**固定配置的Boss怪物列表 `BossMons`
**章节来源**
- [RogueConfig.ts](file://assets/script/game/map/RogueConfig.ts#L18-L20)
- [heroSet.ts](file://assets/script/game/common/config/heroSet.ts#L20-L215)
- [RogueConfig.ts](file://assets\script\game\map\RogueConfig.ts#L18-L20)
- [RogueConfig.ts](file://assets\script\game\common\config\heroSet.ts#L20-L215)
## 关卡配置规则
@@ -192,7 +186,7 @@ H --> I[返回怪物配置]
```
**图表来源**
- [RogueConfig.ts](file://assets/script/game/map/RogueConfig.ts#L95-L173)
- [RogueConfig.ts](file://assets\script\game\map\RogueConfig.ts#L95-L173)
### 怪物数量计算算法
@@ -214,7 +208,7 @@ if (isEliteStage) {
```
**章节来源**
- [RogueConfig.ts](file://assets/script/game/map/RogueConfig.ts#L95-L173)
- [RogueConfig.ts](file://assets\script\game\map\RogueConfig.ts#L95-L173)
## 随机事件系统
@@ -239,7 +233,7 @@ EventType --> StageRule : "配置概率"
```
**图表来源**
- [RogueConfig.ts](file://assets/script/game/map/RogueConfig.ts#L35-L40)
- [RogueConfig.ts](file://assets\script\game\map\RogueConfig.ts#L35-L40)
### 事件触发机制
@@ -263,7 +257,7 @@ if (Math.random() < StageRule.specialAttributeRate) {
```
**章节来源**
- [RogueConfig.ts](file://assets/script/game/map/RogueConfig.ts#L45-L56)
- [RogueConfig.ts](file://assets\script\game\map\RogueConfig.ts#L45-L56)
## 动态难度计算
@@ -287,7 +281,7 @@ G --> H
```
**图表来源**
- [RogueConfig.ts](file://assets/script/game/map/RogueConfig.ts#L69-L73)
- [RogueConfig.ts](file://assets\script\game\map\RogueConfig.ts#L69-L73)
### 难度曲线特征
@@ -298,7 +292,7 @@ G --> H
| Boss怪物 | 5.0x | 2.0x | 2.0x | 2.0x | 2.0x | 终极挑战 |
**章节来源**
- [RogueConfig.ts](file://assets/script/game/map/RogueConfig.ts#L69-L73)
- [RogueConfig.ts](file://assets\script\game\map\RogueConfig.ts#L69-L73)
## 关卡生成流程
@@ -308,29 +302,23 @@ G --> H
```mermaid
sequenceDiagram
participant MC as MissionComp
participant RM as MissionMonComp
participant RC as RogueConfig
participant GM as GameMap
participant MM as MapModel
participant M as Monster
MC->>RM : do_mon_wave()
RM->>RC : getStageMonConfigs(stageNumber)
RC-->>RM : 怪物配置数组
RM->>RM : generateMonsters()
participant MV as MapView
RC->>RC : getStageMonConfigs(stageNumber)
RC-->>GM : 怪物配置数组
GM->>GM : load()
GM->>MM : 初始化模型组件
GM->>MV : 加载地图显示资源
loop 每个怪物配置
RM->>RM : addToStageSpawnQueue()
end
loop 怪物生成队列
RM->>M : addMonster()
M->>MM : 加载怪物资源
MM-->>M : 怪物实例
M-->>RM : 怪物实体
MM->>MM : 添加怪物实体
end
```
**图表来源**
- [MissionMonComp.ts](file://assets/script/game/map/MissionMonComp.ts#L102-L136)
- [RogueConfig.ts](file://assets/script/game/map/RogueConfig.ts#L95-L173)
- [RogueConfig.ts](file://assets\script\game\map\RogueConfig.ts#L95-L173)
- [GameMap.ts](file://assets\script\game\map\GameMap.ts#L20-L35)
### 怪物生成队列管理
@@ -351,7 +339,7 @@ stateDiagram-v2
```
**图表来源**
- [MissionMonComp.ts](file://assets/script/game/map/MissionMonComp.ts#L45-L85)
- [RogueConfig.ts](file://assets\script\game\map\RogueConfig.ts#L95-L173)
## 实际调用机制
@@ -362,44 +350,33 @@ stateDiagram-v2
```mermaid
sequenceDiagram
participant GM as GameMap
participant MC as MissionComp
participant MMon as MissionMonComp
participant RC as RogueConfig
GM->>MC : 初始化游戏
MC->>MC : data_init()
MC->>MC : mission_start()
MC->>MC : to_fight()
MC->>MMon : fight_ready()
MMon->>MMon : do_mon_wave()
Note over MMon : 开始关卡生成流程
MMon->>RC : getStageMonConfigs(currentStage)
RC-->>MMon : 怪物配置数据
MMon->>MMon : generateMonsters()
MMon->>MMon : addToStageSpawnQueue()
GM->>GM : 初始化游戏
GM->>RC : getStageMonConfigs(currentStage)
RC-->>GM : 怪物配置数据
GM->>GM : load()
loop 怪物生成循环
MMon->>MMon : spawnNextMonster()
MMon->>GM : addMonster()
GM->>GM : instantiate怪物
GM->>GM : 添加到地图
end
```
**图表来源**
- [GameMap.ts](file://assets/script/game/map/GameMap.ts#L25-L35)
- [MissionComp.ts](file://assets/script/game/map/MissionComp.ts#L75-L95)
- [MissionMonComp.ts](file://assets/script/game/map/MissionMonComp.ts#L40-L50)
- [GameMap.ts](file://assets\script\game\map\GameMap.ts#L25-L35)
- [RogueConfig.ts](file://assets\script\game\map\RogueConfig.ts#L95-L173)
### 数据流传递
关卡配置数据通过以下路径传递:
1. **配置层**RogueConfig.ts 提供基础配置
2. **逻辑层**MissionMonComp.ts 处理游戏逻辑
3. **渲染层**Mon.ts 负责怪物渲染和行为
4. **状态层**smc.vmdata.mission_data 管理游戏状态
2. **逻辑层**GameMap.ts 处理游戏逻辑
3. **渲染层**MapViewComp.ts 负责地图渲染
4. **状态层**MapModelComp.ts 管理游戏状态
**章节来源**
- [GameMap.ts](file://assets/script/game/map/GameMap.ts#L25-L35)
- [MissionComp.ts](file://assets/script/game/map/MissionComp.ts#L75-L95)
- [MissionMonComp.ts](file://assets/script/game/map/MissionMonComp.ts#L40-L50)
- [GameMap.ts](file://assets\script\game\map\GameMap.ts#L25-L35)
- [RogueConfig.ts](file://assets\script\game\map\RogueConfig.ts#L95-L173)
## 扩展指南