游戏控制器输入


游戏控制器输入

Amazon Fire TV 游戏控制器(以及符合蓝牙 HID 游戏手柄配置文件的其他控制器)具有特定的按钮、安卓运动和关键事件常量。使用此信息捕获应用中的输入事件。

有关所有受支持控制器的按钮行为的指南,请参阅控制器行为指南。有关处理 Fire TV 遥控器输入的信息,请参阅 Amazon Fire TV 遥控器输入

按钮

当前版本的 Fire TV 游戏控制器具有以下按键:

以前版本的游戏控制器具有以下按键:

捕获输入

与 Amazon Fire TV 一起使用的游戏控制器生成用于数字按钮(如 A 按钮)按下的安卓 KeyEvent 事件,以及模拟控制移动(如操纵杆动作)的 MotionEvent 事件.

您可以使用标准的安卓事件侦听器接口和回调(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);
}

要捕获动作事件,请覆盖 View 中的 onGenericMotionEvent() 事件。使用 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 设备上的某些游戏控制器操作可能会针对单个动作引发多个输入事件。例如,Amazon Fire 游戏控制器上的方向键是模拟定向控制(生成动作事件),而是 Fire TV 遥控器上的方向键是数字控制(生成键事件)。

同样,选择操作是游戏控制器上的 A 按钮,但它是 Fire TV 遥控器上的方向键中心按钮。Amazon Fire TV 上的某些游戏控制器操作首先引发主输入事件(通常是动作事件)。然后,如果这些事件不由您的应用处理,它们会引发第二个输入事件(通常是一个键事件)。下面的输入事件参考表中列出了主输入事件和辅助输入事件。

辅助输入事件可以帮助您简化处理游戏控制器输入的过程。如果您的应用只对来自游戏控制器的按钮和方向键事件感兴趣,则辅助事件可让您完全忽略动作事件,并仅处理键事件。

同样,由于 A 按钮同时生成 KEYCODE_BUTTON_AKEYCODE_DPAD_CENTER,如果您的应用支持 Fire TV 遥控器上的中心方向键按钮,则您不必同时测试 A 按钮。

请注意,如果您未正确处理主输入事件,您的应用的行为可能就像收到双重输入一样。如果您已捕获并处理事件,请确保输入事件处理程序返回 true。如果已捕获第一个输入事件,则不会生成辅助输入事件。

输入事件参考

下表描述了每个游戏控制器按钮的动作和键事件常量、这些按钮的建议用户体验行为以及 Amazon Fire TV 用户界面中这些按钮的默认行为。

数字按钮报告键事件 (KeyEvent),模拟控件报告动作事件 (MotionEvent)。请参阅 (../fire-tv/controller-behavior-guidelines.html),了解有关应用中控制器输入的建议行为的信息。

如果您的应用不处理主事件,则 MotionEventKeyEvent 列中的事件外,还会引发“辅助事件”列中列出的事件。有关这些辅助事件的信息,请参阅主输入和辅助输入事件(上文)。

在此表中,游戏是提交到亚马逊应用商店的游戏类别并从亚马逊应用商店安装到设备上的应用。

游戏控制器按键 动作事件 键事件 辅助事件 默认行为
主页 对于游戏,显示“游戏暂停”对话框。对于所有其他应用,将用户返回到主页。
后退 KEYCODE_BACK 将用户返回到上一个操作或屏幕(活动)。
菜单 KEYCODE_MENU 调用安卓上下文菜单 (OptionsMenu)。
A KEYCODE_BUTTON_A KEYCODE_DPAD_CENTER 选择具有当前焦点的项目。
B KEYCODE_BUTTON_B KEYCODE_BACK 返回到上一个屏幕(活动)(与“后退”返回相同)。
X KEYCODE_BUTTON_X 什么都不做。
Y KEYCODE_BUTTON_Y 什么都不做。
向左(方向键)向右(方向键) AXIS_HAT_X(>0 为向右) KEYCODE_DPAD_LEFT KEYCODE_DPAD_RIGHT 在用户界面中向左或向右移动焦点。
向上(方向键)向下(方向键) AXIS_HAT_Y(>0 为向下) KEYCODE_DPAD_UP KEYCODE_DPAD_DOWN 在用户界面中向上或向下移动焦点。
左杆(左/右) AXIS_X(>0 为向右) KEYCODE_DPAD_LEFT KEYCODE_DPAD_RIGHT(如果移动 >.5) 向指定方向移动用户界面中的焦点。
左摇杆(向上/向下) AXIS_Y(>0 为向下) KEYCODE_DPAD_UP KEYCODE_DPAD_DOWN(如果移动 >.5) 向指定方向移动用户界面中的焦点。
左摇杆按下 KEYCODE_BUTTON_THUMBL 播放/暂停。
右摇杆(左/右) AXIS_Z(>0 为向右) 什么都不做。
右摇杆(向上/向下) AXIS_RZ(>0 为向下) 什么都不做。
右摇杆按下 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 快进。