我正在尝试让浏览器报告我的XBOX控制器的状态。然而,在第一次按下按钮后,它似乎变得“卡住”了。我做错了什么?
<body>
<script>
var gamepad = false;
var gamepadDIV = []
window.addEventListener("gamepadconnected", function(e) {
gamepad = e.gamepad;
for (i = 0; i < gamepad.buttons.length + gamepad.axes.length; i++) {
gamepadDIV.push(document.createElement('div'));
document.body.appendChild(gamepadDIV[i]);
}
});
window.addEventListener("gamepaddisconnected", function() {
gamepad = false;
});
function animation() {
if (gamepad != false) {
for (i = 0; i < gamepad.buttons.length; i++) {
gamepadDIV[i].innerHTML = gamepad.buttons[i].pressed;
}
for (i = gamepad.buttons.length; i < gamepad.buttons.length + gamepad.axes.length; i++) {
gamepadDIV[i].innerHTML = gamepad.axes[i - gamepad.buttons.length].value;
}
}
window.requestAnimationFrame(animation);
}
animation();
</script>
</body>发布于 2021-08-23 22:08:10
我在Chrome上也遇到了同样的问题。
基本上,Chrome不会随着状态的改变而更新Gamepad对象。相反,您必须轮询它以获取更新的状态。
在一个关于MDN的教程中,你会看到下面这一行:
var gamepads = navigator.getGamepads ? navigator.getGamepads() : (navigator.webkitGetGamepads ? navigator.webkitGetGamepads : [])基本上,据我所知,您可以使用gamepadconnected事件来处理初始化逻辑,但之后您不能直接引用该对象来获取状态更改。
你可以在这里找到更多关于它的信息:https://developer.mozilla.org/en-US/docs/Web/API/Gamepad_API/Using_the_Gamepad_API
https://stackoverflow.com/questions/62000380
复制相似问题