fix(战斗): 修正近战攻击状态切换逻辑

在移动系统中,当英雄进入攻击范围时,应将 is_atking 设置为 true 以正确触发攻击状态。同时优化攻击范围计算,使用 minSpacingX 作为最大范围基准,并确保最小范围不超过最大范围减一,避免逻辑矛盾。
This commit is contained in:
walkpan
2026-03-15 21:47:15 +08:00
parent 4db3615e04
commit 426fcec5c4

View File

@@ -128,7 +128,9 @@ export class MoveSystem extends ecs.ComblockSystem implements ecs.ISystemUpdate
const currentX = view.node.position.x;
const enemyX = enemy.node.position.x;
const dist = Math.abs(currentX - enemyX);
const [minRange, maxRange] = this.resolveCombatRange(model, 0, 75);
const [rawMinRange] = this.resolveCombatRange(model, 0, this.minSpacingX);
const maxRange = this.minSpacingX;
const minRange = Math.min(rawMinRange, Math.max(0, maxRange - 1));
move.direction = enemyX > currentX ? 1 : -1;
@@ -140,7 +142,7 @@ export class MoveSystem extends ecs.ComblockSystem implements ecs.ISystemUpdate
} else {
const speed = model.speed / 3;
this.moveEntity(view, move.direction, speed);
model.is_atking = false;
model.is_atking = true;
}
}
@@ -159,7 +161,7 @@ export class MoveSystem extends ecs.ComblockSystem implements ecs.ISystemUpdate
} else if (dist > maxRange) {
const speed = model.speed / 3;
this.moveEntity(view, move.direction, speed);
model.is_atking = false;
model.is_atking = true;
} else {
view.status_change("idle");
model.is_atking = true;
@@ -181,7 +183,7 @@ export class MoveSystem extends ecs.ComblockSystem implements ecs.ISystemUpdate
} else if (dist > maxRange) {
const speed = model.speed / 3;
this.moveEntity(view, move.direction, speed);
model.is_atking = false;
model.is_atking = true;
} else {
view.status_change("idle");
model.is_atking = true;