技能动画图片整理
This commit is contained in:
@@ -2,13 +2,24 @@
|
||||
|
||||
<cite>
|
||||
**本文档中引用的文件**
|
||||
- [SkillConComp.ts](file://assets/script/game/hero/SkillConComp.ts)
|
||||
- [SkillEnt.ts](file://assets/script/game/skill/SkillEnt.ts)
|
||||
- [SkillSet.ts](file://assets/script/game/common/config/SkillSet.ts)
|
||||
- [SkillViewCom.ts](file://assets/script/game/skill/SkillViewCom.ts)
|
||||
- [HeroViewComp.ts](file://assets/script/game/hero/HeroViewComp.ts)
|
||||
- [HeroSkills.ts](file://assets\script\game\hero\HeroSkills.ts) - *重构技能数据组件*
|
||||
- [Skill.ts](file://assets\script\game\skill\Skill.ts) - *新增技能实体与组件结构*
|
||||
- [AtkConCom.ts](file://assets\script\game\skill\AtkConCom.ts) - *优化技能碰撞与方向处理*
|
||||
- [HeroAtk.ts](file://assets\script\game\hero\HeroAtk.ts) - *重构伤害计算系统*
|
||||
- [SkillSet.ts](file://assets\script\game/common/config/SkillSet.ts) - *重构技能配置表*
|
||||
- [SkillView.ts](file://assets\script\game\skill\SkillView.ts) - *更新目标选择与范围伤害逻辑*
|
||||
</cite>
|
||||
|
||||
## 更新摘要
|
||||
**变更内容**
|
||||
- 根据最新重构提交更新技能执行机制文档
|
||||
- 新增技能数据组件(SDataCom)和移动组件(SMoveDataComp)说明
|
||||
- 重构技能伤害计算流程,增加命中检测与伤害类型处理
|
||||
- 更新技能碰撞检测逻辑,支持范围伤害与目标数量限制
|
||||
- 优化技能加载与方向处理机制
|
||||
- 支持前后摇动画配置
|
||||
- 更新核心组件架构图以反映ECS实体结构变化
|
||||
|
||||
## 目录
|
||||
1. [概述](#概述)
|
||||
2. [核心组件架构](#核心组件架构)
|
||||
@@ -22,62 +33,71 @@
|
||||
|
||||
## 概述
|
||||
|
||||
SkillConComp类是游戏技能控制系统的核心组件,负责管理英雄的技能冷却、自动施放条件判断以及技能执行流程。该系统采用ECS架构模式,结合定时器机制和节点有效性检查,实现了复杂的技能逻辑控制。
|
||||
SkillConComp类是游戏技能控制系统的核心组件,负责管理英雄的技能冷却、自动施放条件判断以及技能执行流程。该系统采用ECS架构模式,结合定时器机制和节点有效性检查,实现了复杂的技能逻辑控制。近期重构优化了伤害计算与技能释放逻辑,增加了命中检测和伤害类型处理,并支持范围伤害和数量限制。
|
||||
|
||||
## 核心组件架构
|
||||
|
||||
```mermaid
|
||||
classDiagram
|
||||
class SkillConComp {
|
||||
+HeroView : HeroViewComp
|
||||
+HeroEntity : any
|
||||
+TALCOMP : TalComp
|
||||
+skill_cd : number
|
||||
-_timers : object
|
||||
+init() void
|
||||
+onLoad() void
|
||||
class Skill {
|
||||
+addComponents() void
|
||||
+load() void
|
||||
+SDataCom : SDataCom
|
||||
+SMoveCom : SMoveDataComp
|
||||
+SView : SkillView
|
||||
}
|
||||
class SDataCom {
|
||||
+group : number
|
||||
+hit_count : number
|
||||
+Attrs : any
|
||||
+caster : HeroViewComp
|
||||
}
|
||||
class SMoveDataComp {
|
||||
+startPos : Vec3
|
||||
+targetPos : Vec3
|
||||
+s_uuid : number
|
||||
+scale : number
|
||||
+rePos() void
|
||||
}
|
||||
class SkillView {
|
||||
+s_uuid : number
|
||||
+group : number
|
||||
+SConf : SkillConfig
|
||||
+sData : SDataCom
|
||||
+anim : Animation
|
||||
+start() void
|
||||
+update(dt : number) void
|
||||
+castSkill(config : SkillConfig) void
|
||||
-doSkill(config : SkillConfig, is_wfuny : boolean, dmg : number) void
|
||||
+check_wfuny() boolean
|
||||
+selectTargets(t_num : number) Vec3[]
|
||||
+clear_timer() void
|
||||
+reset() void
|
||||
+onDestroy() void
|
||||
+update() void
|
||||
+onBeginContact() void
|
||||
+do_linear() void
|
||||
+do_bezier() void
|
||||
+do_fixedStart() void
|
||||
+apply_damage() void
|
||||
}
|
||||
class SkillEnt {
|
||||
+load(startPos : Vec3, parent : Node, uuid : number, targetPos : any[], caster : HeroViewComp, dmg : number) void
|
||||
+destroy() void
|
||||
+init() void
|
||||
class HeroSkillsComp {
|
||||
+skills : Record<number, SkillSlot>
|
||||
+initSkills() void
|
||||
+addSkill() void
|
||||
+getSkill() void
|
||||
+canCast() void
|
||||
}
|
||||
class HeroViewComp {
|
||||
+playSkillEffect(skill_id : number) void
|
||||
+skills : any[]
|
||||
+mp : number
|
||||
+is_atking : boolean
|
||||
+isStun() boolean
|
||||
+isFrost() boolean
|
||||
}
|
||||
class SkillSet {
|
||||
+SType : enum
|
||||
+TGroup : enum
|
||||
+SkillConfig : interface
|
||||
}
|
||||
SkillConComp --> HeroViewComp : "控制"
|
||||
SkillConComp --> SkillEnt : "创建"
|
||||
SkillConComp --> SkillSet : "使用配置"
|
||||
SkillEnt --> SkillViewCom : "包含"
|
||||
Skill --> SDataCom : "包含"
|
||||
Skill --> SMoveDataComp : "包含"
|
||||
Skill --> SkillView : "包含"
|
||||
SkillView --> SDataCom : "引用"
|
||||
SkillView --> SMoveDataComp : "引用"
|
||||
HeroSkillsComp --> SkillSlot : "管理"
|
||||
```
|
||||
|
||||
**图表来源**
|
||||
- [SkillConComp.ts](file://assets/script/game/hero/SkillConComp.ts#L17-L177)
|
||||
- [SkillEnt.ts](file://assets/script/game/skill/SkillEnt.ts#L14-L78)
|
||||
- [HeroViewComp.ts](file://assets/script/game/hero/HeroViewComp.ts#L70-L780)
|
||||
- [Skill.ts](file://assets\script\game\skill\Skill.ts#L1-L39)
|
||||
- [SDataCom.ts](file://assets\script\game\skill\SDataCom.ts#L1-L20)
|
||||
- [SMoveComp.ts](file://assets\script\game\skill\SMoveComp.ts#L1-L25)
|
||||
- [SkillView.ts](file://assets\script\game\skill\SkillView.ts#L1-L200)
|
||||
- [HeroSkills.ts](file://assets\script\game\hero\HeroSkills.ts#L1-L91)
|
||||
|
||||
**章节来源**
|
||||
- [SkillConComp.ts](file://assets/script/game/hero/SkillConComp.ts#L1-L177)
|
||||
- [SkillEnt.ts](file://assets/script/game/skill/SkillEnt.ts#L1-L78)
|
||||
- [Skill.ts](file://assets\script\game\skill\Skill.ts#L1-L74)
|
||||
- [HeroSkills.ts](file://assets\script\game\hero\HeroSkills.ts#L1-L91)
|
||||
|
||||
## 技能冷却检测机制
|
||||
|
||||
@@ -122,7 +142,7 @@ MoreSkills --> |否| End
|
||||
5. **攻击状态检查**:只有在攻击状态下才允许施放伤害技能
|
||||
|
||||
**章节来源**
|
||||
- [SkillConComp.ts](file://assets/script/game/hero/SkillConComp.ts#L35-L52)
|
||||
- [HeroSkills.ts](file://assets\script\game\hero\HeroSkills.ts#L50-L55)
|
||||
|
||||
## 技能施放流程
|
||||
|
||||
@@ -133,7 +153,7 @@ sequenceDiagram
|
||||
participant Player as "玩家输入/自动触发"
|
||||
participant SkillCon as "SkillConComp"
|
||||
participant HeroView as "HeroViewComp"
|
||||
participant SkillEnt as "SkillEnt"
|
||||
participant SkillEnt as "Skill"
|
||||
participant ECS as "ECS系统"
|
||||
Player->>SkillCon : castSkill(config)
|
||||
SkillCon->>SkillCon : check_wfuny()
|
||||
@@ -147,7 +167,7 @@ SkillCon->>SkillCon : selectTargets(config.t_num)
|
||||
end
|
||||
SkillCon->>HeroView : playSkillEffect(config.uuid)
|
||||
HeroView->>HeroView : 播放技能特效
|
||||
SkillCon->>ECS : ecs.getEntity<SkillEnt>(SkillEnt)
|
||||
SkillCon->>ECS : ecs.getEntity<Skill>(Skill)
|
||||
SkillCon->>SkillCon : 创建setTimeout定时器
|
||||
Note over SkillCon : 延迟执行300ms
|
||||
SkillCon->>SkillCon : 定时器回调函数
|
||||
@@ -156,7 +176,7 @@ SkillCon->>SkillEnt : sEnt.load(...)
|
||||
SkillCon->>SkillEnt : load方法
|
||||
SkillEnt->>SkillEnt : 加载技能预制体
|
||||
SkillEnt->>SkillEnt : 设置节点属性
|
||||
SkillEnt->>SkillEnt : 添加SkillViewCom组件
|
||||
SkillEnt->>SkillEnt : 添加SkillView组件
|
||||
alt wfuny机制启用
|
||||
SkillCon->>SkillCon : scheduleOnce(doSkill, 0.1)
|
||||
end
|
||||
@@ -165,8 +185,8 @@ SkillCon->>SkillCon : this._timers[`skill_${config.uuid}`] = timerId
|
||||
```
|
||||
|
||||
**图表来源**
|
||||
- [SkillConComp.ts](file://assets/script/game/hero/SkillConComp.ts#L54-L85)
|
||||
- [SkillEnt.ts](file://assets/script/game/skill/SkillEnt.ts#L15-L77)
|
||||
- [Skill.ts](file://assets\script\game\skill\Skill.ts#L35-L74)
|
||||
- [SkillView.ts](file://assets\script\game\skill\SkillView.ts#L27-L61)
|
||||
|
||||
### 节点有效性检查机制
|
||||
|
||||
@@ -178,7 +198,7 @@ SkillCon->>SkillCon : this._timers[`skill_${config.uuid}`] = timerId
|
||||
这种设计确保了即使在技能施放过程中节点被销毁,也不会导致错误操作。
|
||||
|
||||
**章节来源**
|
||||
- [SkillConComp.ts](file://assets/script/game/hero/SkillConComp.ts#L54-L85)
|
||||
- [Skill.ts](file://assets\script\game\skill\Skill.ts#L35-L74)
|
||||
|
||||
## 多段连发技能机制
|
||||
|
||||
@@ -344,7 +364,7 @@ onDestroy() {
|
||||
|
||||
### 技能系统设计原则
|
||||
|
||||
1. **模块化设计**:SkillConComp专注于控制逻辑,SkillEnt负责实体管理
|
||||
1. **模块化设计**:SkillConComp专注于控制逻辑,Skill负责实体管理
|
||||
2. **事件驱动**:通过ECS系统实现松耦合的组件通信
|
||||
3. **容错机制**:多重节点有效性检查确保系统稳定性
|
||||
4. **资源管理**:完善的定时器和事件监听器清理机制
|
||||
|
||||
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user