refactor(hero): 统一击退位移逻辑到MoveSystem

将英雄后退的视图层位移操作迁移到MoveSystem统一处理,
通过knockbackVelocity组件属性实现平滑的击退位移衰减与边界钳制,
移除HeroViewComp中直接操作节点位置的代码,解耦视图与战斗逻辑。
This commit is contained in:
pan
2026-08-14 09:53:05 +08:00
parent df0dedba75
commit 1988ae5ef1
3 changed files with 30 additions and 22 deletions

View File

@@ -415,28 +415,10 @@ export class HeroViewComp extends CCComp {
this.showDamage(damage, isCrit);
}
private isBackingUp: boolean = false; // 🔥 添加后退状态标记
//后退
back(distance: number = 0) {
// 🔥 防止重复调用后退动画
if (this.isBackingUp) return;
this.isBackingUp = true; // 🔥 设置后退状态
// 基础击退距离 + 额外距离强化,双方阵营统一
const dist = FightSet.BACK_RANG + distance;
const isHero = this.model.fac == FacSet.HERO;
// 边界钳制HERO 不越过 BoxSet.LETF_ENDMON 不越过 BoxSet.RIGHT_END
const tx = isHero
? Math.max(BoxSet.LETF_END, this.node.position.x - dist)
: Math.min(BoxSet.RIGHT_END, this.node.position.x + dist);
tween(this.node)
.to(0.1, { position: v3(tx, this.node.position.y, 0) })
.call(() => {
this.isBackingUp = false; // 🔥 动画完成后重置状态
})
.start();
// 击退位移由 MoveSystem 统一处理,视图层只负责触发,不直接操作 position
// 具体击退速度由 HeroAtkSystem 在伤害结算后写入 MoveComp.knockbackVelocity
}
// 伤害计算和战斗逻辑已迁移到 HeroBattleSystem