見出し画像

【microStudio】ゲームパッドクラスをまとめた

こんには。なおしむです。
microStudioというGameEngineを使ってJavaScriptでゲームを作っています。
ゲームを作っているとユーザの入力を処理することがよくあります。入力にはキーボードやゲームパッドなどがあり、次のようなIF文を書くことが多々あります。

// キー操作
if(gamepad.LEFT || keyboard.S || keyboard.LEFT) { // 左
  candidatePos.x--;
} else if(gamepad.RIGHT || keyboard.F || keyboard.RIGHT) { // 右
  candidatePos.x++;
}
if((gamepad.press.UP || gamepad.press.A || keyboard.press.E || keyboard.SPACE || keyboard.UP) && isOnGround()) { // ジャンプ
  isJump = true;
}

IF文の中でいろいろ書いてますが、結局必要なのは、ゲームコントローラで言うところの上下左右とAボタンとBボタンに相当するイベントです。なのでこのIF文を何度も書かなくても良いように、オリジナルのゲームパッドクラスを作りました。

ソース全体

ソースは下記のとおりです。
キーボードのマッピングはゲームによって違うため、keyboardMap変数を変えることでカスタマイズできるようにしました。


使い方

まずはinitでインスタンスを生成して、updateの最初で呼び出します。
その後、myGamePadの値を使って分岐します。

var myGamePad;
init = function() {
  myGamePad = new GamePad();
}
update = function() {
  myGamePad.update();
  if(myGamepad.LEFT) { // 左
    player.x--;
  } else if(myGamepad.RIGHT) { // 右
    player.x++;
  }
}

コントローラーによる分岐がスッキリかけました。

キーのマッピングをカスタマイズ

さきほどのソースでは、キーのマッピングをマイクラのようにしています。
具体的には上下左右のキーを
上がEキー、下がDキー、左がSキー、右がFキー
に割り当てています。
これを、たとえば、viのように
上がKキー、下がJキー、左がHキー、右がLキーに割り当てるなら、keyboardMapを次のように変更すればOKです。

const keyboardMap = {
  UP: ["K"],    // 変更
  DOWN: ["J"],  // 変更
  LEFT: ["H"],  // 変更
  RIGHT: ["L"], // 変更
  A: ["SPACE", "K"],
  B: ["ENTER", "J"],
    }


まとめ

よく使うキー配置を自分なりのクラスにまとめてみました。
ゲームづくりも楽しいですが、ゲームづくりを楽にするライブラリづくりも楽しいものです。
それではまた。

いいなと思ったら応援しよう!