Прослушивание событий кнопок геймпада с контроллером xbox one - PullRequest
0 голосов
/ 04 марта 2020

Я бы хотел послушать события нажатия кнопок на контроллере xbox one, но, похоже, многие решения для этого являются экспериментальными и находятся в стадии разработки. В большинстве примеров, которые я нашел, показано, как получать входные данные с геймпада, используя метод опроса, чтобы неоднократно проверять геймпад на наличие событий, но для моего приложения очень важно, чтобы я мог записать точное время нажатия кнопки, а я не хочу пропустить нажатия кнопок в промежутке между сканированием игрового планшета.

Я могу использовать Firefox или Chrome, но я пока не получил следующие решения для работы в любом браузере:

Firefox: Согласно этой странице https://www.chromestatus.com/feature/5989275208253440#, «кнопка геймпада и события оси реализованы в Firefox за флагом dom.gamepad.non_standard_events.enabled». Я включил это в Firefox, но прослушивание событий изменения состояния (как описано в https://www.smashingmagazine.com/2015/11/gamepad-api-in-web-games/) по-прежнему не действует.

Chrome: Это Страница github https://github.com/MozillaReality/gamepad-plus/blob/master/README.md выглядит так, как будто она может расширить API Gamepad, чтобы я также мог прослушивать события нажатия кнопок в Chrome, но когда я пытаюсь скомпилировать JavaScript как отдельный модуль, используя npm run build Я получаю ошибку node_modules_missing, и сборка завершается неудачей.

Буду признателен за совет о том, как включить .addEventListener('gamepadbuttondown' ... для работы в любом из этих браузеров.

1 Ответ

0 голосов
/ 04 марта 2020

Благодаря примеру с кодом ручки Кристофера Ван Вимерша по адресу https://codepen.io/cvan/pen/aOzgGE Я нашел решение в Firefox.

Сначала я открыл браузер Firefox (версия 73.0. 1) и введите about:config в URL. Затем я переключил dom.gamepad.non_standard_events.enabled в true.

Затем я использовал следующие функции / слушатели из кодекса Кристофера:

var gamepadConnected = function (e) {
  console.log('Gamepad connected at index %d: %s. %d buttons, %d axes.',
    e.gamepad.index, e.gamepad.id, e.gamepad.buttons.length, e.gamepad.axes.length);
};

var gamepadDisconnected = function (e) {
  console.log('Gamepad removed at index %d: %s.', e.gamepad.index, e.gamepad.id);
};


var gamepadButtonDown = function (e) {
  console.log('Gamepad button down at index %d: %s. Button: %d.',
    e.gamepad.index, e.gamepad.id, e.button);
};

var gamepadButtonUp = function (e) {
  console.log('Gamepad button up at index %d: %s. Button: %d.',
    e.gamepad.index, e.gamepad.id, e.button);
};
window.addEventListener('gamepadconnected', gamepadConnected);
window.addEventListener('gamepaddisconnected', gamepadDisconnected);

window.addEventListener('gamepadbuttondown', gamepadButtonDown);
window.addEventListener('gamepadbuttonup', gamepadButtonUp);

Затем, когда нажимается кнопка, я записываю метку времени, используя var timestamp = new Date().getTime() .

...