fix(战斗): 调整近战攻击逻辑与攻击动画配置
- 将技能 6001 的触发类型改为碰撞检测,提高命中准确性 - 优化近战攻击距离计算,使用配置值并增加最小距离限制 - 移除攻击动画中的多余事件,缩短动画时长 - 调整攻击预制体的碰撞体尺寸和位置,使其与实际攻击范围匹配 - 简化远程英雄战斗逻辑,移除不必要的距离判断
This commit is contained in:
@@ -193,7 +193,7 @@ export const SkillSet: Record<number, SkillConfig> = {
|
||||
6001: {
|
||||
uuid:6001,name:"空挥",sp_name:"atk_s1",icon:"1026",TGroup:TGroup.Enemy,TType:TType.Frontline,readyAnm:"",endAnm:"",act:"atk",DTType:DTType.single,
|
||||
ap:100,hit_count:1,hitcd:0.2,speed:720,with:0,
|
||||
ready:0,EAnm:0,DAnm:9001,RType:RType.fixed,EType:EType.animationEnd,
|
||||
ready:0,EAnm:0,DAnm:9001,RType:RType.linear,EType:EType.collision,
|
||||
buffs:[],debuffs:[],info:"对前方目标造成100%攻击的伤害",
|
||||
},
|
||||
6002: {
|
||||
|
||||
@@ -3,7 +3,7 @@ import { HeroViewComp } from "./HeroViewComp";
|
||||
import { HeroAttrsComp } from "./HeroAttrsComp";
|
||||
import { smc } from "../common/SingletonModuleComp";
|
||||
import { FacSet } from "../common/config/GameSet";
|
||||
import { HType, resolveFormationTargetX } from "../common/config/heroSet";
|
||||
import { HeroDisVal, HType, resolveFormationTargetX } from "../common/config/heroSet";
|
||||
import { Node } from "cc";
|
||||
|
||||
@ecs.register('MoveComp')
|
||||
@@ -36,7 +36,8 @@ interface MoveFacConfig {
|
||||
|
||||
@ecs.register('MoveSystem')
|
||||
export class MoveSystem extends ecs.ComblockSystem implements ecs.ISystemUpdate {
|
||||
private readonly meleeAttackRange = 52;
|
||||
private readonly meleeAttackRange = HeroDisVal[HType.Melee];
|
||||
private readonly meleeMinEnemyDistanceX = 80;
|
||||
private readonly allySpacingX = 40;
|
||||
private readonly allyOverlapSpacingX = 14;
|
||||
private readonly displacementReleaseX = 10;
|
||||
@@ -172,38 +173,39 @@ export class MoveSystem extends ecs.ComblockSystem implements ecs.ISystemUpdate
|
||||
const enemyX = enemy.node.position.x;
|
||||
const dist = Math.abs(currentX - enemyX);
|
||||
const maxRange = this.meleeAttackRange;
|
||||
const minRange = Math.min(this.meleeMinEnemyDistanceX, maxRange);
|
||||
|
||||
move.direction = enemyX > currentX ? 1 : -1;
|
||||
move.targetX = enemyX - move.direction * maxRange;
|
||||
move.targetX = enemyX - move.direction * minRange;
|
||||
|
||||
if (dist <= maxRange) {
|
||||
if (dist <= minRange) {
|
||||
view.status_change("idle");
|
||||
model.is_atking = true;
|
||||
} else if (dist <= maxRange) {
|
||||
const speed = model.speed / 3;
|
||||
this.moveEntity(view, move.direction, speed, move.targetX);
|
||||
model.is_atking = true;
|
||||
} else {
|
||||
const speed = model.speed / 3;
|
||||
this.moveEntity(view, move.direction, speed, move.targetX);
|
||||
this.moveEntity(view, move.direction, speed);
|
||||
model.is_atking = true;
|
||||
}
|
||||
}
|
||||
|
||||
private processMidLogic(e: ecs.Entity, move: MoveComp, view: HeroViewComp, model: HeroAttrsComp, enemy: HeroViewComp) {
|
||||
this.processRangedFormationCombat(move, view, model, enemy, 120, 360);
|
||||
this.processRangedFormationCombat(move, view, model);
|
||||
}
|
||||
|
||||
private processLongLogic(e: ecs.Entity, move: MoveComp, view: HeroViewComp, model: HeroAttrsComp, enemy: HeroViewComp) {
|
||||
this.processRangedFormationCombat(move, view, model, enemy, 360, 720);
|
||||
this.processRangedFormationCombat(move, view, model);
|
||||
}
|
||||
|
||||
private processRangedFormationCombat(move: MoveComp, view: HeroViewComp, model: HeroAttrsComp, enemy: HeroViewComp, defaultMin: number, defaultMax: number) {
|
||||
private processRangedFormationCombat(move: MoveComp, view: HeroViewComp, model: HeroAttrsComp) {
|
||||
const currentX = view.node.position.x;
|
||||
const enemyX = enemy.node.position.x;
|
||||
const targetX = this.getFixedFormationX(model);
|
||||
move.targetX = targetX;
|
||||
const [minRange, maxRange] = this.resolveCombatRange(model, defaultMin, defaultMax);
|
||||
const dist = Math.abs(currentX - enemyX);
|
||||
const needMoveToFormation = Math.abs(currentX - targetX) > 5;
|
||||
const shouldKeepDistance = dist < minRange;
|
||||
if (needMoveToFormation || shouldKeepDistance) {
|
||||
if (needMoveToFormation) {
|
||||
const dir = targetX > currentX ? 1 : -1;
|
||||
move.direction = dir;
|
||||
const speed = model.speed / 3;
|
||||
|
||||
Reference in New Issue
Block a user