如何解决游戏手柄api中的“ onkeyup”是什么?
我正在尝试使用Gamepad API。当按下按钮时,它一直被“触发”,直到释放按钮为止。对于像在游戏中奔跑或射击之类的东西来说,这很酷,但是当我想在菜单内导航时(例如,向下移动16个菜单项而不是一个),这是有问题的。
在普通键盘上,我将使用onkeyup / onkeydown来查看何时按键结束。但是在gamepad api上,我没有找到类似的东西。
JS:
var gamepadPressCounter = 0;
function update() {
const gamepads = navigator.getGamepads();
if (gamepads[0].buttons[0].pressed === true) {
gamepadPressCounter++;
}
window.requestAnimationFrame(update);
}
那么,您知道一种方法来使GamepadPressCounter每次按下一次而不是无限次吗?
解决方法
您必须根据上次检查它是否为pressed
来进行检查。它不会触发事件,它是有状态的。您正在直接检查是否按下了按钮。
制作一个变量来存储您上次检查按钮的状态,并进行比较以查看按钮是否自上次更改以来。
const anyButtonPressedChangeListener = {
listeners: [],addListener(cb) {
this.listeners.push(cb);
},signal(state) {
for (const cb of this.listeners) {
cb(state);
}
}
}
let buttonstate = false;
const loop = () => {
const gamepads = navigator.getGamepads();
const gamepad = gamepads[0];
if (gamepad) {
const statenow = gamepad.buttons.some(btn => btn.pressed);
if (buttonstate !== statenow) {
buttonstate = statenow;
anyButtonPressedChangeListener.signal(statenow);
}
} else {
console.log("Not connected");
}
setTimeout(loop,1000);
}
anyButtonPressedChangeListener.addListener((buttonState) => {
console.log(`Any button pressed changed to ${buttonState}`);
});
loop();
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。