ゲームコントローラー入力


ゲームコントローラー入力

Amazon Fire TVゲームコントローラー(日本では現在お取り扱いできません)や、Bluetooth HIDゲームパッドプロファイルに準拠したコントローラー全般には、各種ボタン、Androidモーション、キーイベント定数が備わっています。この情報を使用して、アプリで入力イベントをキャプチャします。

サポート対象コントローラーのボタン動作に関するガイドラインについては、コントローラー動作のガイドラインを参照してください。Fire TVリモコンの入力を処理する方法について詳しくは、Amazon Fire TVリモコン入力を参照してください。

ボタン

最新のFire TVゲームコントローラーのボタンは次のとおりです。

旧バージョンのゲームコントローラーのボタンは次のとおりです。

入力をキャプチャする

Amazon Fire TVで使用されるゲームコントローラーでは、デジタルボタン([A] ボタンなど)を押すとAndroid KeyEventイベントが生成され、アナログコントロール(ジョイスティックなど)を動かすとMotionEventイベントが生成されます。

単純なボタン入力は、標準のAndroidイベントリスナーインターフェイスとコールバック(onClick()onFocusChange()など)を使用して処理できます。

Viewで特定のボタン押し下げイベントをキャプチャするには、onKeyDown()などの入力イベントハンドラーをオーバーライドします。

特定のキーをキャプチャするには、KeyEventクラスの入力定数に一致するかどうかをテストします。たとえば、[A] ボタンが押されたことをキャプチャするには、次のコードを使用します。

@Override
public boolean onKeyDown(int keyCode, KeyEvent event){
    boolean handled = false;

    switch (keyCode){
        case KeyEvent.KEYCODE_BUTTON_A:
                // ... 選択処理
                handled = true;
                break;
     }
     return handled || super.onKeyDown(keyCode, event);
}

モーションイベントをキャプチャするには、ViewonGenericMotionEvent()イベントをオーバーライドします。モーションイベントを生成したコントロールを特定するにはMotionEventクラスの入力定数を使用し、モーションイベントの値を特定するにはMotionEventクラスのgetAxisValue()などのイベントを使用します。

@Override
public boolean onGenericMotionEvent(MotionEvent event){
    // 左のジョイスティックから値の変更を取得します
    float deltaX = event.getAxisValue(MotionEvent.AXIS_X);
    float deltaY = event.getAxisValue(MotionEvent.AXIS_Y);

    if (deltaX > 0.5 && deltaY > 0.5) {
        // 何かを実行します
        handled = true;
    }

    return handled || super.onGenericMotionEvent(event);
}

プライマリおよびセカンダリ入力イベント

Amazon Fire TVデバイスのゲームコントローラー操作では、1つの操作に対して複数の入力イベントが生成されることもあります。たとえば、Amazon Fire TVゲームコントローラー(日本未対応)のD-Pad(十字キー)は、モーションイベントを生成するアナログの方向コントロールですが、Fire TVリモコンのD-Pad(ナビゲーション)は、キーイベントを生成するデジタルコントロールです。

同様に、選択操作は、ゲームコントローラーでは[A] ボタンですが、Fire TVリモコンではD-Padの [選択] ボタンです。Amazon Fire TVの一部のゲームコントローラー操作では、最初にプライマリ入力イベント(通常はモーションイベント)が生成されます。これらのイベントがアプリで処理されなければ、セカンダリ入力イベント(通常はキーイベント)が生成されます。プライマリとセカンダリの入力イベントについては、下記の入力イベントリファレンスの表をご覧ください。

セカンダリ入力イベントを利用すると、ゲームコントローラー入力の処理プロセスを簡略化できます。ゲームコントローラーからのボタンイベントおよびD-Padイベントだけをアプリで処理する場合、セカンダリイベントを使用することで、モーションイベントをすべて無視し、キーイベントだけを対象にすることができます。

同様に、[A] ボタンはKEYCODE_BUTTON_AKEYCODE_DPAD_CENTERの両方を生成するので、アプリがFire TVリモコンのD-Padの [選択] ボタンに対応している場合、[A] ボタンのテストは必要ありません。

プライマリ入力イベントを適切に処理しないと、アプリが入力を二重に受信しているように動作する可能性があることに注意してください。イベントがキャプチャされて処理されると、入力イベントハンドラーはtrueを返します。プライマリ入力イベントがキャプチャされた場合、セカンダリ入力イベントは生成されません。

入力イベントリファレンス

各ゲームコントローラーボタンのモーションイベント定数とキーイベント定数、ユーザー側での推奨動作、Amazon Fire TVユーザーインターフェイスにおける各ボタンのデフォルトの動作を次の表に示します。

デジタルボタンはキーイベント(KeyEvent)を、アナログコントロールはモーションイベント(MotionEvent)を通知します。コントローラー入力に対するアプリの推奨動作については、コントローラー動作のガイドラインを参照してください。

MotionEvent列またはKeyEvent列に示されているプライマリイベントをアプリが処理しない場合、これらのイベントに加えてセカンダリイベント列のイベントも生成されます。これらのセカンダリイベントについては、上記のプライマリとセカンダリの入力イベントを参照してください。

この表で、ゲームとは、Amazonアプリストアのゲームカテゴリーに申請され、Amazonアプリストアからデバイスにインストールされたアプリのことです。

ゲームコントローラーボタン MotionEvent KeyEvent セカンダリイベント デフォルトの動作
ホーム なし なし なし ゲームでは「ゲームが一時停止されました」というダイアログを表示します。それ以外のアプリの場合、ホーム画面に戻ります。
戻る なし KEYCODE_BACK なし 前の操作または画面(アクティビティ)に戻ります。
メニュー なし KEYCODE_MENU なし Androidコンテキストメニュー(OptionsMenu)が起動されます。
A なし KEYCODE_BUTTON_A KEYCODE_DPAD_CENTER 現在フォーカスがあるアイテムが選択されます。
B なし KEYCODE_BUTTON_B KEYCODE_BACK 前の画面(アクティビティ)に戻ります([戻る] と同じ)。
X なし KEYCODE_BUTTON_X なし 何も起こりません。
Y なし KEYCODE_BUTTON_Y なし 何も起こりません。
左(D-Pad)右(D-Pad) AXIS_HAT_X(正の値は右方向を表します) なし KEYCODE_DPAD_LEFT KEYCODE_DPAD_RIGHT ユーザーインターフェイスでフォーカスが左方向または右方向に移動します。
上(D-Pad)下(D-Pad) AXIS_HAT_Y(正の値は下方向を表します) なし KEYCODE_DPAD_UP KEYCODE_DPAD_DOWN ユーザーインターフェイスでフォーカスが上方向または下方向に移動します。
左側のジョイスティック(左/右) AXIS_X(正の値は右方向を表します) なし KEYCODE_DPAD_LEFT KEYCODE_DPAD_RIGHT(移動が0.5を超える場合) ユーザーインターフェイスのフォーカスが特定の方向に移動します。
左側のジョイスティック(上/下) AXIS_Y(正の値は下方向を表します) なし KEYCODE_DPAD_UP KEYCODE_DPAD_DOWN(移動が0.5を超える場合) ユーザーインターフェイスのフォーカスが特定の方向に移動します。
左側のジョイスティックの押し下げ なし KEYCODE_BUTTON_THUMBL なし 再生/一時停止
右側のジョイスティック(左/右) AXIS_Z(正の値は右方向を表します) なし なし 何も起こりません。
右側のジョイスティック(上/下) AXIS_RZ(正の値は下方向を表します) なし なし 何も起こりません。
右側のジョイスティックの押し下げ なし KEYCODE_BUTTON_THUMBR なし 再生/一時停止
再生/一時停止(第1世代のFireゲームコントローラーのみ) なし KEYCODE_MEDIA_PLAY_PAUSE なし 再生/一時停止
早戻し(第1世代のFireゲームコントローラーのみ) なし KEYCODE_MEDIA_REWIND なし 早戻し
早送り(第1世代のFireゲームコントローラーのみ) なし KEYCODE_MEDIA_FAST_FORWARD なし 早送り
左側のトリガー(L2) AXIS_BRAKE なし なし 音量+
左側のショルダー(L1) なし KEYCODE_BUTTON_L1 なし 早戻し
右側のトリガー(R2) AXIS_GAS なし なし 音量-
右側のショルダー(R1) なし KEYCODE_BUTTON_R1 なし 早送り