# @debuffjp/input 中文文档

规范地址：https://npmcn.com/package/%40debuffjp/input/

版本：0\.33\.0
npm 元数据更新时间：2026-11-11T02:35:51.168Z
中文译文更新时间：2026-11-11T18:58:16.423Z
软件包许可：MIT

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40debuffjp/input
原文对照：https://npmcn.com/package/%40debuffjp/input/?lang=original
项目主页：https://debuff.jp/
源码仓库：https://github.com/debuffjp/debuff

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：90.8 kB，26 个文件
- 模块格式：ES Module
- TypeScript 类型：包内自带
- 运行依赖：0 个
- 首次发布：2026-10-16T09:03:32.024Z
- 最新版本发布：2026-11-11T02:35:50.780Z
- 近 30 天下载量：8967（2026-10-12 至 2026-11-10，npm 官方下载统计）
- 已发布版本数：56（近 12 个月 56 个）

## 中文简介

基于动作的键盘、指针和游戏板输入来解禁

## 安装

```sh
npm install @debuffjp/input
```

也可以使用：`pnpm add @debuffjp/input`、`yarn add @debuffjp/input`、`bun add @debuffjp/input`

## README

# @ debuffjp/ 输入

键盘、鼠标/touch/pen(Pointer Events)和游戏板(标准映射)的基于行动的投入。 无依取相.

```ts
import { Input } from "@debuffjp/input";

const input = new Input(game, {
  bindings: {
    left: ["ArrowLeft", "KeyA", "PadLeft", "PadStickLeft"],
    right: ["ArrowRight", "KeyD", "PadRight", "PadStickRight"],
    jump: ["Space", "PadA", "Pointer"],
  },
});

// inside Scene.update
const dx = input.axis("left", "right");
if (input.pressed("jump")) jump();
```

每个模拟步骤后边缘会自动清除,因此一个比帧短的龙头永远不会被错过.

## 绑定名称

| 来源 | 名称 |
| --- | --- |
| 键盘 | [`KeyboardEvent.code`](https://developer.mozilla.org/docs/Web/API/KeyboardEvent/code)数字 : `Space`, (中文(简体) ), `KeyZ`, (中文(简体) ), `ArrowUp`,, , , , , , , , |
| 指针 | `Pointer` (主鼠标按钮,触摸或笔), `PointerRight`, (中文(简体) ), `PointerMiddle` (鼠标右中键) |
| 游戏板 | `PadA` `PadB` `PadX` `PadY` `PadL1` `PadR1` `PadL2` `PadR2` `PadSelect` `PadStart` `PadL3` `PadR3` `PadUp` `PadDown` `PadLeft` `PadRight` |
| 左键 | `PadStickUp` `PadStickDown` `PadStickLeft` `PadStickRight` |
| 屏幕上控制( E)`TouchControls`从0.26 | `TouchStickUp` `TouchStickDown` `TouchStickLeft` `TouchStickRight`,以及 `Touch<name>` 每个按钮 : `TouchA`, (中文(简体) ), `TouchJump`,, , , , , , , , |

## 屏幕触摸控制

从0.26起, `TouchControls` 在屏幕上放出接通电话和平板电脑的棍子和按钮. 它们提供与键和垫相同的动作,所以游戏读取 `input.down("jump")` 无论玩家使用什么:

```ts
import { Input, TouchControls } from "@debuffjp/input";

const input = new Input(game, {
  bindings: {
    left: ["ArrowLeft", "PadStickLeft", "TouchStickLeft"],
    right: ["ArrowRight", "PadStickRight", "TouchStickRight"],
    jump: ["Space", "PadA", "TouchA"],
  },
});
const touch = new TouchControls(game, input, {
  stick: { x: 40, y: -40, zone: [0, 0, 160, -1] }, // floating: centres where the thumb lands on the left
  buttons: { A: { x: -32, y: -32 } },              // 32 units in from the bottom-right corner
});

// in render, outside draw.withCamera:
touch.draw(draw);
```

-   位置在逻辑单位;负值从右或下边缘计算,所以布局在 `scale: "expand"` 更改大小. `radius` 默认为棍子为24个,按钮为16个.
-   拿着一根棍子 `zone` 浮出水面:它聚集在拇指落到矩形的地方。 没有它,它就会在半径的两倍内被触摸. `touch.stick.x` 财务报告和审定财务报表 `y` 模拟(-1至1) `TouchStick` 方向数过去 `deadzone` (默认0.3).
-   每个接触器都属于它开始的控制器,直到手指抬起,因此拇指可以从一个按钮上滑出并保持它被扣住,两个步骤之间的快取仍然算作被按下并放出.
-   他们从第一次触摸(`show: "touch"`),因此鼠标和键盘玩家永远看不到; `show: "always"` 或者说 `"never"`,或设置 `touch.visible` 你自己来.
-   他们的接触也是指针 代码移动到 `input.pointer` 应该跳过它时 `touch.holding`,或检查 `touch.owns(id)` 每个接触.
-   `draw()` 纯半透明圆圈( e)`{ color, alpha }` 以点缀它们。 控件的外观是游戏的调用: 读取 `touch.stick` (中心,节点, `held`和 `touch.buttons` (职位, `down`画你自己.
-   测试和代理驱动 `input.pointer.touchStart(id, x, y)`, (中文(简体) ), `touchMove` 财务报告和审定财务报表 `touchEnd`,并重放记录他们像任何触摸.

## API 密码

-   `input.down(action)`, (中文(简体) ), `input.pressed(action)`, (中文(简体) ), `input.released(action)`, (中文(简体) ), `input.axis(neg, pos)`
-   `input.rebind(action, keys)`:替换动作绑定(一个控制菜单),使被捕获的密钥步入正轨. `input.bindings` 输入是您所通过地图的自己副本, 所以用 `rebind` 而不是到位.
-   `input.pointer`数字 : `x`, (中文(简体) ), `y` (逻辑), `down`, (中文(简体) ), `pressed`, (中文(简体) ), `released`, (中文(简体) ), `touches`
-   `input.pointer.kind`数字 : `"mouse"`, (中文(简体) ), `"touch"` 或者说 `"pen"`,以最新媒体为准
-   `input.pointer.touchesStarted`, (中文(简体) ), `touchesEnded`: 开始或结束此步骤的联系人( 每一联系人使用 `id`, (中文(简体) ), `x`, (中文(简体) ), `y`, (中文(简体) ), `kind`),所以一个游戏不diff `touches` 本身
-   `input.pointer.right`, (中文(简体) ), `input.pointer.middle`数字 : `down`, (中文(简体) ), `pressed`, (中文(简体) ), `released` 鼠标右中键
-   `input.pointer.wheel`, (中文(简体) ), `wheelX`: 车轮或音轨盘滚动 CSS 像素中的此步骤(正 = 下/ 右),重置每一步. 过 `captureWheel: true` 停止在用轮子放大的游戏下滚动页面.
-   `input.keys`数字 : `down(code)`, (中文(简体) ), `pressed(code)`, (中文(简体) ), `released(code)`
-   `input.pads`数字 : `stickX`, (中文(简体) ), `stickY`, (中文(简体) ), `connected`, (中文(简体) ), `deadzone`
-   `input.virtual`:每一步由代码设定的源,有约束性名称(`TouchControls` 此处写入其控件). 从0.26
-   测试和屏幕按钮的程序控制 : `keys.press/release`, (中文(简体) ), `pointer.press/move/release/scroll/pressButton/releaseButton`,以及 `pointer.touchStart(id, x, y)` 编号 : `touchMove` 编号 : `touchEnd` 用于多触碰(第一次接触还按住主指针,如实触摸)

## 常见问题

### @debuffjp/input 是什么？

基于动作的键盘、指针和游戏板输入来解禁

### 如何安装 @debuffjp/input？

在项目目录运行 npm install @debuffjp/input，或使用 pnpm add / yarn add / bun add。

### @debuffjp/input 支持 TypeScript 吗？

支持。包内自带 TypeScript 类型声明（package\.json 声明了 types 入口），安装后即可获得类型提示，无需再安装 @types 包。

### @debuffjp/input 支持 ESM 还是 CommonJS？

以 ES Module 形式发布，推荐使用 import 引入。在 CommonJS 项目中，Node\.js 20\.19\+ / 22\.12\+ 可以直接 require\(\) 不含顶层 await 的 ES Module，更早的版本需要改用动态 import\(\)。

### @debuffjp/input 可以商用吗？

@debuffjp/input 使用 MIT 许可。宽松许可：允许商业使用、修改和再分发，通常只需在分发时保留原版权与许可声明。以上为概括，不构成法律意见，请以许可原文为准。

### @debuffjp/input 的下载量有多少？

根据 npm 官方下载统计，@debuffjp/input 在 2026/10/12 – 2026/11/10 这 30 天内被下载 8,967 次，日均约 299 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入，适合横向比较热度，不能直接等同于使用人数。

### @debuffjp/input 还在维护吗？

最新版本 0\.33\.0 发布于 2026/11/11（今天）；至今共发布 56 个版本，其中过去 12 个月发布了 56 个；首次发布于 2026/10/16。发布频率只是参考信号：功能稳定的工具可能很少需要更新，建议结合源码仓库的 issue 和提交记录判断。

