0

作为一种爱好和学习,无论这是否可能,我正在尝试为 Android 实现一个简单的第一人称射击游戏。不幸的是,我在处理鼠标事件处理时遇到了死胡同。

我已经有一个onGenericMotion()-Listener,它处理MotionEvent系统框架生成的对象。问题是,MotionEvent由鼠标生成的对象仅包含绝对坐标,一旦光标到达屏幕的边缘或角落,它们往往会“卡住”。所以我在考虑相对鼠标坐标。虽然我发现没有任何功能MotionEvent可以提供相对运动,但使用

adb shell su -- getevent -lt /dev/input/event3

检查它的输出显示,当一个人试图移动光标时,内核会产生不同的相对运动事件,即使它卡在屏幕的一角也是如此。因此,鉴于我的射手具有 su 访问权限,我可以获得相对运动。

现在的问题是:一点点 Google-fu 透露,在许多第一人称射击游戏中,典型的鼠标移动是通过以下方式实现的

  1. 使用相对鼠标坐标和
  2. 通过将鼠标光标重新定位在屏幕中央。

所以,这个问题真的有两个方面:

  1. 是否可以将鼠标光标重新定位在 Android 上的屏幕中央?和
  2. 如果不是,那么典型的“第一人称射击”鼠标移动是否可以仅通过使用相对鼠标移动信息来实现?
4

2 回答 2

0

现在,无需 root 权限即可使用 Android 8.0+ 中的指针捕获 API(2017 年 8 月发布)。总之:

要请求捕获指针,请在视图上调用requestPointerCapture()方法。

一旦捕获指针的请求成功,Android 就会调用onPointerCaptureChange(true)并开始传递鼠标事件。

您的焦点视图可以通过执行以下任务之一来处理事件:

  1. 如果您使用的是自定义视图,请覆盖onCapturedPointerEvent(MotionEvent)

  2. 否则,注册一个OnCapturedPointerListener

应用中的视图可以通过调用releasePointerCapture()来释放指针捕获。

于 2020-11-17T21:31:30.713 回答
-1

事实证明,完全回答了我的问题。没关系。

于 2014-03-12T13:42:21.800 回答