作为一种爱好,为了学习是否可能,我试图为Android实施一个简单的第一人称射击游戏。不幸的是,在处理鼠标事件处理时,我遇到了一个终点。
我已经有一个onGenericMotion()
-LISTENER,它处理由系统框架生成的MotionEvent
对象。问题在于,由鼠标生成的MotionEvent
对象仅包含 absolute 坐标,一旦光标到达屏幕的边缘或角落,就会获得"卡住"。因此,我在想相对的鼠标坐标。虽然我在MotionEvent
上找不到可以提供相对运动的功能,但使用
adb shell su -- getevent -lt /dev/input/event3
并检查其输出表明,即使将光标粘在屏幕的角落时,内核也会产生不同的相对运动事件。因此,鉴于我的射击者可以进入SU,我可以获得相对运动。
现在的问题:一点点Google-Fu揭示了,在许多第一人称射击游戏中,典型的鼠标运动是通过
实现的- 使用相对鼠标坐标和
- 由重新定位
所以,这个问题确实是双重的:
- 是否可以将鼠标光标重新放置在Android上的屏幕中心?和
- 如果不是,则可以"第一人称射击者"通过仅使用相对鼠标运动信息来实现鼠标运动?
现在,如果没有根本权限,这是可能的,在Android 8.0 中,指针捕获API(2017年8月发布)。总结:
要请求指针捕获,请在视图上调用requestPoInterCapture()方法。
一旦捕获指针的请求成功,Android呼叫OnPoInterCapturechange(true),并开始传递鼠标事件。
您的专注视图可以通过执行以下任务之一来处理事件:
如果您使用的是自定义视图,请覆盖oncapturedpointerevent(MotionEvent)。
否则,注册一个OncaptrudPoInterListener。
您应用程序中的视图可以通过调用reareAsePoInterCapture()。
来释放指针捕获。
事实证明,这完全回答了我的问题。没关系。