Как различить два геймпада одного типа? - PullRequest
0 голосов
/ 16 января 2020

У меня есть два геймпада, которые подключены через USB, и они одного и того же типа. Как я могу их дифференцировать, когда они имеют одинаковые поля? Я мог бы использовать индекс, но что произойдет, когда я снова подключу их к компьютеру, эти индексы могут поменяться местами (эти геймпады имеют разные функции). Также я думаю, что индексы могут поменяться местами во время выполнения. Есть UUID или что-то?

enter image description here

1 Ответ

0 голосов
/ 16 января 2020

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

let gamepads = [];

// On Connect add it to list of gamepads
window.addEventListener("gamepadconnected", function(e) {
  let gamepad = navigator.getGamepads()[e.gamepad.index];
  // You should find some better way to create a unique ID (Can use UUID's)
  let uniqueId = Math.floor(Math.random() * 10000);
  gamepads.push({gamepad: gamepad, uniqueId: uniqueId});
});

// On disconnect
window.addEventListener("gamepaddisconnected", function(e) {
  let disconnectedGamepad = gamepads.find((gamepad) => {
      return gamepad.index === e.gamepad.index;
  });
  gamepads = gamepads.splice(disconnectedGamepad.index, 1);
});
...