2927
現在、Javascriptによるゲームフレームワークを作成しています。
主要なブラウザのうち、ChromeとFirefoxへの対応を行っていたのですが、ファミコンのようなUSBゲームパッドと、XBOX360用のUSBゲームコントローラーに対応していました。
しかし、最近のFirefoxではXBOX360コントローラーの値が取れなくなりました（Chromeでは問題ありません）。
値の取り方は以下のコードになります（CoffeeScriptです）。

```

    gamepadsinfo = if (navigator.getGamepads) then navigator.getGamepads() else (if (navigator.webkitGetGamepads) then navigator.webkitGetGamepads else [])
    
```

ネットをいろいろと検索したのですが、みなさん問題なく使えているのか、はたまたXBOX360コントローラーにはあまり関心が無いのかわかりませんが、情報がほとんどありません。

FirefoxでのXBOX360コントローラーの値を、Javascriptから取得する方法はありますでしょうか？
もしくは私がなにか間違っているのでしょうか。
CC BY-SA 3.0
2015-01-01T18:50:22.663
2925
2015-01-01T22:35:37.937
925
question
javascript firefox coffeescript
FirefoxでのJavascriptによるGamepadAPIを使ったXBOX360コントローラー
Firefox は、 `gamepadisconnected`
イベントを取ることを推奨しているようですので、ゲームのメインループ内で上記をしないのなら、以下のコードで取得を試みるべきです。（私の環境でも、１度目の
getGamePads() の呼び出しは失敗することがありました。 )

```

    window.addEventListener("gamepadconnected", function(e) {
      var gp = navigator.getGamepads()[e.gamepad.index];
      console.log("gamepad[%s]: button.length=%d", gp.id, gp.buttons.length);
    });
    
```

...が! 今度は Chrome が `gamepadisconnected` イベントを持たないため、おかしなことになるので、Chrome
用には、定期的なポーリングをするのがよいようです。

```

    var interval;
    
    if (!('ongamepadconnected' in window)) {
      // No gamepad events available, poll instead.
      interval = setInterval(pollGamepads, 500);
    }
    
    function pollGamepads() {
      var gamepads = (typeof navigator.getGamepads === "function") ? navigator.getGamepads() : ((typeof navigator.webkitGetGamepads === "function")? navigator.webkitGetGamepads : []);
      for (var i = 0; i < gamepads.length; i++) {
        var gp = gamepads[i];
        if (gp) {
          gamepadInfo.innerHTML = "Gamepad connected at index " + gp.index + ": " + gp.id +
            ". It has " + gp.buttons.length + " buttons and " + gp.axes.length + " axes.";
          gameLoop();
          clearInterval(interval);
        }
      }
    }
    
```

以上は、Mozilla の [Using the Gamepad API](https://developer.mozilla.org/en-
US/docs/Web/Guide/API/Gamepad) を参考にしました。
CC BY-SA 3.0
2015-01-01T21:44:08.757
2927
2015-01-01T22:35:37.937
2015-01-01T22:35:37.937
4978
4978
2925
answer