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 currentX = view.node.position.x;
|
||||||
const enemyX = enemy.node.position.x;
|
const enemyX = enemy.node.position.x;
|
||||||
const dist = Math.abs(currentX - enemyX);
|
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;
|
move.direction = enemyX > currentX ? 1 : -1;
|
||||||
|
|
||||||
@@ -140,7 +142,7 @@ export class MoveSystem extends ecs.ComblockSystem implements ecs.ISystemUpdate
|
|||||||
} else {
|
} else {
|
||||||
const speed = model.speed / 3;
|
const speed = model.speed / 3;
|
||||||
this.moveEntity(view, move.direction, speed);
|
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) {
|
} else if (dist > maxRange) {
|
||||||
const speed = model.speed / 3;
|
const speed = model.speed / 3;
|
||||||
this.moveEntity(view, move.direction, speed);
|
this.moveEntity(view, move.direction, speed);
|
||||||
model.is_atking = false;
|
model.is_atking = true;
|
||||||
} else {
|
} else {
|
||||||
view.status_change("idle");
|
view.status_change("idle");
|
||||||
model.is_atking = true;
|
model.is_atking = true;
|
||||||
@@ -181,7 +183,7 @@ export class MoveSystem extends ecs.ComblockSystem implements ecs.ISystemUpdate
|
|||||||
} else if (dist > maxRange) {
|
} else if (dist > maxRange) {
|
||||||
const speed = model.speed / 3;
|
const speed = model.speed / 3;
|
||||||
this.moveEntity(view, move.direction, speed);
|
this.moveEntity(view, move.direction, speed);
|
||||||
model.is_atking = false;
|
model.is_atking = true;
|
||||||
} else {
|
} else {
|
||||||
view.status_change("idle");
|
view.status_change("idle");
|
||||||
model.is_atking = true;
|
model.is_atking = true;
|
||||||
|
|||||||
Reference in New Issue
Block a user