【发布时间】:2021-07-15 11:16:23
【问题描述】:
我正在尝试编写一个网页,我可以在其中检测 Xbox 控制器上的按钮按下,并根据按下的按钮向用户显示一个布尔值。现在,我可以检测到正在连接的控制器并将其显示为字符串。文档说在这里使用此代码来检测按钮按下:
var isPressed = navigator.getGamepads()[0].pressed;
但 Chrome 在使用时显示此错误:
Uncaught TypeError: Cannot read property 'pressed' of null
错误链接到上述代码行的.pressed 部分。 All the documentation is on the Mozilla site,所以我假设他们在编写教程时使用了 FireFox。
我最理想的结果是:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<h id="button"></h>
<h id="gpInfo"></h>
<script>
var i = 1;
window.addEventListener("gamepadconnected", function(e) {
var gp = navigator.getGamepads()[e.gamepad.index];
document.getElementById("gpInfo").innerHTML = ("A " + gp.id + " was successfully detected! There are a total of " + gp.buttons.length + " buttons.")
//alert("A " + gp.id + " was successfully detected!")
});
var isPressed = navigator.getGamepads()[0].pressed;
document.getElementById("button").innerHTML = isPressed;
</script>
<!-- <script type="text/javascript" src="gamepadtest.js"></script> -->
</head>
</html>
代码会在屏幕上打印一个布尔值,供用户在按下按钮时查看。 这是我第一次使用 JavaScript 和 HTML。如果你能让你的答案对菜鸟友好,那就太好了! Gamepad API 和 GamepadButton 的文档
【问题讨论】:
-
错误告诉你
navigator.getGamepads()[0]什么都不是,所以:验证代码中是否有 is 游戏手柄。例如。const gamepads = navigator.getGamepads(); if (gamepads.length > 0) { const gamepad = ...; /* more code here */ } else { console.warn("there are no gamepads"); } -
@Mike'Pomax'Kamermans 好的,稍后再试。直到用户按下游戏手柄上的按钮,游戏手柄才会连接。
标签: javascript html gamepad-api