Files
heros/.qoder/repowiki/zh/content/地图系统/怪物系统/属性系统.md
panw 4235e3b776 refactor(game): 移除已弃用的事件常量
- 删除 UpdateHero 和 UpdateFightHero 事件
- 移除 MISSION_UPDATE 事件常量
- 优化游戏事件枚举定义
2025-10-28 16:15:47 +08:00

14 KiB
Raw Blame History

属性系统

**本文档引用的文件** - [HeroAttrs.ts](file://assets/script/game/common/config/HeroAttrs.ts) - [heroSet.ts](file://assets/script/game/common/config/heroSet.ts) - [Mon.ts](file://assets/script/game/hero/Mon.ts) - [Hero.ts](file://assets/script/game/hero/Hero.ts) - [HeroViewComp.ts](file://assets/script/game/hero/HeroViewComp.ts) - [RogueConfig.ts](file://assets/script/game/map/RogueConfig.ts) - [Mission.ts](file://assets/script/game/common/config/Mission.ts)

目录

  1. 简介
  2. 项目结构
  3. 核心组件
  4. 架构概览
  5. 详细组件分析
  6. 依赖关系分析
  7. 性能考虑
  8. 故障排除指南
  9. 结论

简介

英雄属性系统是游戏战斗机制的核心组成部分负责管理角色的基础属性、动态计算和战斗中的属性变化。该系统通过strengthMultiplier强度倍率实现了基于配置数据的动态属性缩放机制支持HP、AP、DEF、SPEED等基础属性的精确计算并提供了完整的buff/debuff管理系统。

系统采用模块化设计将属性定义、计算逻辑、配置管理和运行时控制分离确保了良好的可维护性和扩展性。通过HeroAttrs.ts中的getAttrs与getNeAttrs函数系统建立了完整的属性容器构建逻辑支持英雄和怪物的统一属性管理。

项目结构

属性系统的核心文件分布在以下目录结构中:

graph TB
subgraph "配置层"
A[HeroAttrs.ts] --> B[属性枚举定义]
A --> C[属性类型配置]
A --> D[职业成长配置]
E[heroSet.ts] --> F[英雄配置数据]
E --> G[怪物配置数据]
end
subgraph "实体层"
H[Hero.ts] --> I[英雄实体]
J[Mon.ts] --> K[怪物实体]
end
subgraph "视图层"
L[HeroViewComp.ts] --> M[属性计算引擎]
L --> N[Buff系统]
L --> O[负面状态管理]
end
A --> L
E --> H
E --> J
H --> L
J --> L

图表来源

章节来源

核心组件

属性枚举系统

属性系统定义了完整的属性分类体系,涵盖基础生存、攻击、防御、特殊效果等多个维度:

属性类别 属性名称 类型 描述
基础生存 HP_MAX 数值型 最大生命值
基础生存 MP_MAX 数值型 最大魔法值
攻击属性 AP 数值型 攻击力
攻击属性 MAP 数值型 魔法攻击力
防御属性 DEF 数值型 物理防御
防御属性 MDEF 数值型 魔法防御
特殊效果 SPEED 百分比型 移动速度加成
特殊效果 CRITICAL 百分比型 暴击率

Buff类型系统

系统支持两种类型的Buff效果

classDiagram
class BType {
+VALUE : 0
+RATIO : 1
}
class BuffInstance {
+number value
+BType BType
+number remainTime
}
class HeroViewComp {
+Record~number, Array~ BUFFS
+Record~number, Array~ BUFFS_TEMP
+recalculateSingleAttr(attrIndex)
+addBuff(buffConf)
+clearBuffs(attrIndex, isBuff)
}
HeroViewComp --> BuffInstance
BuffInstance --> BType

图表来源

章节来源

架构概览

属性系统采用分层架构设计,实现了清晰的职责分离:

graph TD
A[配置层] --> B[计算层]
B --> C[运行时层]
C --> D[渲染层]
A1[属性枚举] --> A
A2[职业配置] --> A
A3[Buff配置] --> A
B1[属性计算] --> B
B2[强度倍率] --> B
B3[成长曲线] --> B
C1[属性容器] --> C
C2[Buff系统] --> C
C3[负面状态] --> C
D1[视觉效果] --> D
D2[伤害显示] --> D
D3[状态提示] --> D

图表来源

详细组件分析

hero_init方法中的强度倍率计算

hero_init方法是属性系统的核心入口负责根据strengthMultiplier强度倍率进行动态属性计算

sequenceDiagram
participant Client as 客户端
participant Mon as Monster
participant Hero as Hero
participant Calc as 属性计算器
participant View as HeroViewComp
Client->>Mon : hero_init(strengthMultiplier)
Mon->>Calc : 计算基础属性
Calc->>Calc : baseHp = hero.hp * strengthMultiplier
Calc->>Calc : baseAp = hero.ap * strengthMultiplier
Calc->>Calc : baseDef = hero.def * strengthMultiplier
Mon->>View : 初始化属性容器
View->>View : getAttrs()
View->>View : getNeAttrs()
View->>View : 设置基础属性
View->>View : initAttrs()
View-->>Client : 属性初始化完成

图表来源

强度倍率的应用机制

强度倍率通过以下方式影响属性计算:

  1. 基础属性缩放baseHp = hero.hp * strengthMultiplier
  2. 攻击力调整baseAp = hero.ap * strengthMultiplier
  3. 防御力计算baseDef = hero.def * strengthMultiplier

这种设计允许系统根据关卡进度、难度系数等因素动态调整怪物强度,而无需修改英雄配置数据。

章节来源

hv.Attrs与hv.NeAttrs属性系统

属性容器初始化流程

属性容器的初始化遵循严格的步骤序列:

flowchart TD
A[开始初始化] --> B[清空现有Buff]
B --> C[获取英雄配置]
C --> D[重置基础属性]
D --> E[初始化其他属性]
E --> F[加载初始Buff]
F --> G[属性计算引擎就绪]
D1[Attrs.HP_MAX = base_hp] --> D
D2[Attrs.MP_MAX = base_mp] --> D
D3[Attrs.DEF = base_def] --> D
D4[Attrs.AP = base_ap] --> D
D5[Attrs.MAP = base_map] --> D
D6[Attrs.SPEED = base_speed] --> D
D7[Attrs.DIS = base_dis] --> D
E1[设置其他属性为0] --> E

图表来源

属性容器构建逻辑

getAttrs和getNeAttrs函数负责构建属性容器

classDiagram
class Attrs {
<<enumeration>>
HP_MAX : 0
MP_MAX : 1
AP : 10
DEF : 20
SPEED : 63
+getAttrs() : object
}
class NeAttrs {
<<enumeration>>
IN_FROST : 0
IN_STUN : 1
IN_BURN : 2
IN_POISON : 3
+getNeAttrs() : object
}
class HeroViewComp {
+any Attrs
+any NeAttrs
+initAttrs()
+recalculateSingleAttr(attrIndex)
}
HeroViewComp --> Attrs
HeroViewComp --> NeAttrs

图表来源

章节来源

怪物数据共享机制

怪物通过heroSet.ts中的英雄配置数据实现数据共享

怪物配置复用

graph LR
A[HeroInfo配置] --> B[英雄数据]
A --> C[怪物数据]
B1[uuid: 5001] --> B
B2[name: 刘邦] --> B
B3[type: warrior] --> B
B4[hp: 125] --> B
B5[ap: 15] --> B
C1[uuid: 5201] --> C
C2[name: 兽人战士] --> C
C3[type: warrior] --> C
C4[hp: 25] --> C
C5[ap: 5] --> C
B -.->|复用| C

图表来源

怪物强度动态调整

系统通过RogueConfig.ts提供怪物强度的动态调整机制

参数 默认值 说明
stageMultiplier 1 + (stageNumber - 1) * 0.1 关卡倍率每关增加10%
levelMultiplier 1 + (level - 1) * 0.05 等级倍率每级增加5%
totalMultiplier stageMultiplier * levelMultiplier 总强度倍率

章节来源

属性计算引擎

属性计算公式

系统采用双重计算模式,根据属性类型选择不同的计算公式:

flowchart TD
A[属性计算开始] --> B{属性类型判断}
B --> |数值型| C[数值型计算]
B --> |百分比型| D[百分比型计算]
C --> C1[基础值 + 数值Buff]
C1 --> C2[× (1 + 百分比Buff/100)]
C2 --> C3[Math.floor结果)
D --> D1[基础值 + 数值Buff]
D1 --> D2[+ 百分比Buff]
D2 --> D3[直接结果]
C3 --> E[属性值规范化]
D3 --> E
E --> F[属性计算完成]

图表来源

Buff系统管理

Buff系统支持持久型和临时型两种Buff类型

classDiagram
class BuffSystem {
+Record~number, Array~ BUFFS
+Record~number, Array~ BUFFS_TEMP
+addBuff(buffConf)
+removeBuff(attrIndex, value, isPermanent)
+updateTemporaryBuffsDebuffs(dt)
+recalculateSingleAttr(attrIndex)
}
class BuffConf {
+number buff
+BType BType
+number value
+number time
+number chance
}
class BuffInstance {
+number value
+BType BType
+number remainTime
}
BuffSystem --> BuffConf
BuffSystem --> BuffInstance

图表来源

章节来源

职业成长曲线系统

职业属性增长配置

系统为每种职业定义了独特的属性成长曲线:

graph TB
subgraph "战士职业成长"
A1[力量→生命值: 3.0]
A2[力量→攻击力: 1.5]
A3[力量→防御力: 0.8]
A4[敏捷→暴击率: 0.3]
A5[精神→吸血: 0.4]
end
subgraph "刺客职业成长"
B1[力量→生命值: 1.8]
B2[力量→攻击力: 1.3]
B3[力量→防御力: 0.3]
B4[敏捷→暴击率: 1.0]
B5[幸运→暴击率: 1.5]
end
subgraph "法师职业成长"
C1[智力→魔法值: 2.0]
C2[智力→魔法攻击: 1.8]
C3[智力→魔法防御: 0.8]
C4[智力→作用范围: 0.3]
end

图表来源

成长系数计算

系统提供了多种快捷方法来计算属性增长:

方法名 输入参数 输出 用途
addStrength heroType, strengthPoints 属性增长映射 计算力量属性增长
addIntelligence heroType, intelligencePoints 属性增长映射 计算智力属性增长
addAgility heroType, agilityPoints 属性增长映射 计算敏捷属性增长
calculateTotalAttributeGains heroType, baseAttrs 总属性增长 计算多属性总增长

章节来源

依赖关系分析

属性系统的依赖关系呈现清晰的层次结构:

graph TD
A[HeroAttrs.ts] --> B[HeroViewComp.ts]
C[heroSet.ts] --> D[Hero.ts]
C --> E[Mon.ts]
B --> D
B --> E
F[RogueConfig.ts] --> E
G[Mission.ts] --> F
A --> H[属性枚举]
A --> I[属性类型]
A --> J[职业配置]
K[GameEvent.ts] --> B
L[SkillSet.ts] --> B

图表来源

章节来源

性能考虑

属性计算优化策略

  1. 延迟计算:只在必要时重新计算属性值
  2. 批量更新:合并多个属性变更操作
  3. 缓存机制:避免重复计算相同属性
  4. 增量更新:只更新受影响的属性

内存管理

  • 使用对象池管理Buff实例
  • 及时清理过期的临时Buff
  • 避免属性容器的频繁重建

计算复杂度

属性计算的时间复杂度为O(n)其中n为活跃Buff的数量。系统通过以下方式优化性能

  • 使用索引快速定位属性
  • 批量处理相似类型的Buff
  • 延迟执行非关键属性计算

故障排除指南

常见问题及解决方案

属性计算异常

问题:属性值超出预期范围 原因Buff叠加过多或计算公式错误 解决方案检查Buff配置验证属性值规范化逻辑

性能问题

问题:属性更新导致帧率下降 原因:频繁的属性重新计算 解决方案:实施属性变更批处理,减少不必要的重新计算

数据同步问题

问题:客户端与服务器属性不一致 原因:配置数据版本不匹配 解决方案:实施配置版本控制,确保数据一致性

章节来源

结论

英雄属性系统通过strengthMultiplier强度倍率实现了灵活的动态属性计算机制支持HP、AP、DEF、SPEED等基础属性的精确缩放。系统采用模块化设计将属性定义、计算逻辑、配置管理和运行时控制分离确保了良好的可维护性和扩展性。

通过HeroAttrs.ts中的getAttrs与getNeAttrs函数系统建立了完整的属性容器构建逻辑支持英雄和怪物的统一属性管理。职业成长曲线系统为不同职业提供了特色化的属性发展路径增强了游戏的策略深度。

怪物通过heroSet.ts中的英雄配置数据实现数据共享配合RogueConfig.ts中的强度倍率计算实现了自定义属性成长曲线和难度系数调整功能。系统提供了丰富的配置选项和性能优化建议为游戏开发提供了强大的属性管理基础设施。