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

ゲームコントローラー入力 (Amazon Fire TV)

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);
}

モーションイベントをキャプチャするには、onGenericMotionEvent()イベントをViewでオーバーライドします。モーションイベントを生成したコントロールを特定するには、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ゲームコントローラーの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) を処理します。コントローラー入力に対するアプリの推奨動作については、コントローラー動作のガイドライン (Fire TV) を参照してください。

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

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

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