0

我有两个通过 USB 连接的游戏手柄,它们的类型完全相同。当它们具有相同的字段时,我如何区分它们?我可以使用索引,但是当我将它们再次连接到计算机时会发生什么,这些索引可能会被交换(这些游戏手柄具有不同的功能)。另外我认为索引可能会在运行时被交换。有UUID之类的吗?

在此处输入图像描述

4

1 回答 1

0

您可以保留自己的游戏手柄阵列,并为每个连接的游戏手柄创建自己的 ID。我不确定 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);
});
于 2020-01-16T06:25:53.053 回答