作为一个爱好和学习,是否这是可能的,我试图实现一个简单的第一人称射击游戏的Android。不幸的是,我遇到了死胡同时,处理鼠标事件处理。
我已经有了一个onGenericMotion()
-Listener,它处理系统框架生成的MotionEvent
对象,问题是,鼠标生成的MotionEvent
对象只包含 * 绝对 * 坐标,这往往会“卡住”,一旦光标到达屏幕的边缘或角落。我想是相对鼠标坐标。虽然我在MotionEvent
上没有发现可以提供相对运动的特性,但使用adb shell su -- getevent -lt /dev/input/event3
检查它的输出发现,当用户试图移动光标时,内核会生成不同的相对运动事件,即使光标停留在屏幕的某个角落也是如此,因此,假设我的射手有su访问权限,我就可以获得相对运动。
现在的问题是:一点点谷歌福透露,在许多第一人称射击游戏,典型的鼠标移动是通过
1.使用相对鼠标坐标和
1.通过将鼠标光标 * 重新定位 * 在屏幕中心。
所以,问题其实是双重的:
1.是否可以在Android上将鼠标光标重新定位在屏幕中心?以及
1.如果不能,那么典型的“第一人称射击游戏”鼠标移动是否可以仅通过使用相对鼠标移动信息来实现?
3条答案
按热度按时间hiz5n14c1#
借助Android 8.0+(2017年8月发布)中的指针捕获API,无需root权限即可实现这一点。
若要请求指针捕获,请对视图调用requestPointerCapture()方法。
捕获指针的请求成功后,Android将调用onPointerCaptureChange(true),并开始交付鼠标事件。
聚焦视图可以通过执行以下任务之一来处理事件:
1.如果使用的是自定义视图,请覆盖onCapturedPointerEvent(MotionEvent)。
1.否则,注册OnCapturedPointerListener。
应用中的视图可通过调用releasePointerCapture()释放指针捕获。
dbf7pr2w2#
@林恩的答案有效,但请注意,视图需要将“isClickable”属性设置为true。
t0ybt7op3#
事实证明,这完全回答了我的问题。那就算了。