Posted at
phina.jsDay 13

phina.jsでGamePadを使う

More than 1 year has passed since last update.

この記事はphina.js Advent Calendar 201613日目の記事です。

前日→Flowを使った非同期処理の基本 by alkn203さん


ついに念願のXBOX360コントローラをPCにつなぐレシーバーを手に入れたぞ!

むしろなんで今やっと買ったのよ、という感じですが、これでPCでダラバーデススマ大復活をキーボードでやる苦痛から解放されるぜイエーイ。いやエスプレイドをキーボードでやってガラ婦人まで行けるのでそんな苦痛でもないのですが。

しかしまほシューはキーボードでやってて、オールクリアどうしても出来なかったのが、パッドを導入してあっという間にオールクリア出来ました。

やっぱりパッドだと操作が楽ですね。

という事で、あまりにも嬉しかったのでphina.jsでgamepadを使ってみました。


phina.GamapadManager

phina.jsではゲームパッドをphina.GamapadManagerで簡単に扱う事が出来ます。


GamepadManagerの定義

var gamepadManager = phina.input.GamepadManager();

//Update内等で毎フレーム呼ぶ必要があります
gamepadManager.update();



GamePadの取得

//GamePad1つ目

var gamepad_1 = gamepadManager.get(0);

//GamePad2つ目
var gamepad_2 = gamepadManager.get(1);



キーの状態取得

//十字キーの上が押されているか

var up = gamepad_1.getKey("up");
//Aボタンが押されているか
var A = gamepad_1.getKey("A");
//L1ボタンが押されているか
var L1 = gamepad_1.getKey("L1");


アナログスティックの状態取得

//二次元ベクトルで格納されてます。

//左側のアナログスティック
var left = that.gamepad_1.getStickDirection(0);
//右側のアナログスティック
var right = that.gamepad_1.getStickDirection(1);


テストコード

http://runstant.com/minimo/projects/GamepadTestSample

左右でトマピコを移動、上キーまたはAボタンでジャンプします。

左側のアナログスティックでも同様の操作が可能です。

取得キーコードの違いから、Chrome以外は正しく動きません。

っていうか、ブラウザ毎でGamepad APIの挙動が違うのなんとかしてください。


おしまい

実際のゲームにも導入したいですが、ブラウザ間の互換性とか、キーコンフィグ画面作るとか考えるとちょっと億劫かなーって感じがしますね。汎用で使えるコンフィグ画面を作りたい所です。

自分の環境だとこんなだったぜー、見たいな事があったらコメント頂けると嬉しいです。