我有一个蓝牙游戏板连接到我的安卓设备,它是良好的连接和传输。从操纵杆获取数据的唯一方法似乎是从 onGenericMotionEvent
或者 dispatchGenericMotionEvent
从文件里,等等 onGenericMotionEvent
:
通用运动事件描述操纵杆运动、鼠标悬停、轨迹板触摸、滚轮运动和其他输入事件。
我已经检查了我输入的来源,并验证了来源是正确的,控制器规格等。然而,我得到的唯一输入是一个纯-1.0,0.0,或1.0从我的操纵杆,这确实是内部的 MotionRange
明确规定。它从不返回中间值。
除此之外,我还关心批处理(来自文档):
为了提高效率,带有action\u move的运动事件可以将单个对象中的多个运动样本批处理在一起。
这是不是意味着我永远不能对我的操纵杆有直接的,即时的反馈?尽管如此,我检查了历史价值,但是 MotionEvent#getHistorySize
为每个模拟输入返回0(另一方面,按钮事件工作正常)
这是控制器、批处理、事件处理或其他方面的问题吗?如果无法避免批处理,我是否可以设置一个单独的线程来连续收集这些信息?
为了清楚起见,我使用的是通过蓝牙和api级别30连接的任天堂joycon(r)。
1条答案
按热度按时间weylhg0b1#
经过进一步的研究,它似乎是操纵手柄简单地传输数据,就好像他们是d-pad按钮,在
AXIS_HAT_X
以及AXIS_HAT_Y
只是。我试着连接其他控制器,它们的功能和预期的一样。根据所使用的控制器,肯定存在输入延迟,但发送的数据是相对连续的。看起来,如果事件系统接收到操纵杆数据中的大量更改,它可能会绘制一个历史点,但大多数情况下不会。
所以在大多数情况下,批处理不应该是一个问题。
至于快乐的缺点,如果这听起来像是一个内在的限制,而不是什么我可以绕过。
我不确定是否有办法解决这个问题,但它解释了我遇到的问题。