@ debuffjp/ 输入
键盘、鼠标/touch/pen(Pointer Events)和游戏板(标准映射)的基于行动的投入。 无依取相.
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数字 : 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") 无论玩家使用什么:
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, (中文(简体) ),touchesinput.pointer.kind数字 :"mouse", (中文(简体) ),"touch"或者说"pen",以最新媒体为准input.pointer.touchesStarted, (中文(简体) ),touchesEnded: 开始或结束此步骤的联系人( 每一联系人使用id, (中文(简体) ),x, (中文(简体) ),y, (中文(简体) ),kind),所以一个游戏不difftouches本身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, (中文(简体) ),deadzoneinput.virtual:每一步由代码设定的源,有约束性名称(TouchControls此处写入其控件). 从0.26- 测试和屏幕按钮的程序控制 :
keys.press/release, (中文(简体) ),pointer.press/move/release/scroll/pressButton/releaseButton,以及pointer.touchStart(id, x, y)编号 :touchMove编号 :touchEnd用于多触碰(第一次接触还按住主指针,如实触摸)