【问题标题】:Querying Continuous Joystick Data查询连续摇杆数据
【发布时间】:2021-04-08 05:48:56
【问题描述】:

我有一个蓝牙游戏手柄连接到我的 Android 设备,并且连接和传输良好。 从操纵杆获取数据的唯一方法似乎是来自onGenericMotionEventdispatchGenericMotionEvent
来自文档,onGenericMotionEvent

通用运动事件描述操纵杆移动、鼠标悬停、触控板触摸、滚轮移动和其他输入事件。

我检查了输入的来源,并验证了来源正确,控制器规格等。 但是,我得到的唯一输入是来自我的操纵杆的纯 -1.0、0.0 或 1.0,它确实在指定的 MotionRange 内。它从不返回中间值。
除此之外,我还担心批处理(来自文档):

为了提高效率,带有 ACTION_MOVE 的运动事件可以将多个运动样本批处理到一个对象中。

这是否意味着我永远无法在我的操纵杆上获得直接、即时的反馈?尽管如此,我还是检查了历史值,但MotionEvent#getHistorySize 为每个模拟输入返回了 0。 (附带说明,按钮事件可以正常工作)

这是控制器、批处理、事件处理或其他方面的问题吗?如果无法避免批处理,我可以设置一个单独的线程来持续收集这些信息吗?

为了清楚起见,我使用的是通过蓝牙和 API 级别 30 连接的 Nintendo JoyCon (R)。

【问题讨论】:

    标签: java android joystick gamepad


    【解决方案1】:

    经过进一步研究,JoyCon 操纵杆似乎只是像 D-pad 按钮一样传输数据,仅限 AXIS_HAT_XAXIS_HAT_Y。 我尝试连接其他控制器,它们的功能与预期一样。

    肯定有输入延迟,具体取决于所使用的控制器,但发送的数据相对连续。似乎如果事件系统接收到操纵杆数据的大量变化,它可能绘制 1 个历史点,但大多数时候它没有。
    所以在大多数情况下,批处理应该不是问题。

    至于 Joy Cons,如果这听起来像是一种内部限制,而不是我可以解决的问题。
    我不确定是否有办法解决这个问题,但它解释了我遇到的问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-27
      • 2022-01-23
      • 2022-07-19
      • 2016-05-01
      • 2020-12-24
      • 1970-01-01
      相关资源
      最近更新 更多