微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

查询连续摇杆数据

如何解决查询连续摇杆数据

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

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

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

为了效率,使用 ACTION_MOVE 的运动事件可以将单个对象内的多个运动样本批处理在一起。

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

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

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

解决方法

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

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。