fix(战斗): 修正近战攻击状态切换逻辑
在移动系统中,当英雄进入攻击范围时,应将 is_atking 设置为 true 以正确触发攻击状态。同时优化攻击范围计算,使用 minSpacingX 作为最大范围基准,并确保最小范围不超过最大范围减一,避免逻辑矛盾。
This commit is contained in:
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user