# HeroKeyMover API 文档

本文档由 `DeepSeek R1` 模型生成并微调。

## 类描述

`HeroKeyMover` 是勇士按键移动的核心控制器,负责将热键系统与勇士移动逻辑结合,实现基于键盘输入的连续移动控制。支持多方向优先级处理和移动中断机制。

---

## 属性说明

| 属性名       | 类型        | 描述                                     |
| ------------ | ----------- | ---------------------------------------- |
| `hotkey`     | `Hotkey`    | 关联的热键控制器实例                     |
| `mover`      | `HeroMover` | 勇士移动逻辑执行器                       |
| `scope`      | `symbol`    | 当前移动触发的作用域(默认使用主作用域) |
| `hotkeyData` | `MoveKey`   | 移动方向与热键的映射配置                 |

---

## 构造方法

```typescript
function constructor(
    hotkey: Hotkey,
    mover: HeroMover,
    config?: MoveKeyConfig
): HeroKeyMover;
```

-   **参数**
    -   `hotkey`: 已配置的热键控制器实例
    -   `mover`: 勇士移动逻辑实例
    -   `config`: 自定义方向键映射配置(可选)

**默认按键映射**:

```typescript
const map = {
    left: 'moveLeft',
    right: 'moveRight',
    up: 'moveUp',
    down: 'moveDown'
};
```

---

## 方法说明

### `setScope`

```typescript
function setScope(scope: symbol): void;
```

设置当前移动控制的作用域(用于多场景隔离)。

-   **参数**
    -   `scope`: 唯一作用域标识符

---

### `press`

```typescript
function press(dir: Dir): void;
```

触发指定方向的移动按键按下状态。

-   **参数**
    -   `dir`: 移动方向(`'left' | 'right' | 'up' | 'down'`)

---

### `release`

```typescript
function release(dir: Dir): void;
```

解除指定方向的移动按键按下状态。

-   **参数**
    -   `dir`: 要释放的移动方向

---

### `tryStartMove`

```typescript
function tryStartMove(): boolean;
```

尝试启动移动逻辑(自动根据当前方向键状态判断)。

-   **返回值**  
    `true` 表示移动成功启动,`false` 表示条件不满足

---

### `endMove`

```typescript
function endMove(): void;
```

立即终止当前移动过程。

---

### `destroy`

```typescript
function destroy(): void;
```

销毁控制器实例(自动解除所有事件监听)。

---

## 总使用示例

```typescript
import { gameKey, mainScope } from '@motajs/system-action';

// 初始化移动控制器
const keyMover = new HeroKeyMover(
    gameKey,
    heroMover,
    { left: 'moveLeft', right: 'moveRight' } // 自定义部分按键映射
);

// 设置允许触发的作用域
keyMover.setScope(mainScope);

// 销毁控制器
keyMover.destroy();
```

## 移动优先级机制

1. **最后按下优先**:当同时按下多个方向键时,以后按下的方向为准
2. **队列延续**:在移动过程中持续检测按键状态,自动延续移动队列
3. **作用域隔离**:只有当前作用域匹配时才会响应按键事件