我正在尝试编写一款小型安卓游戏,手机放在桌面上
在屏幕上有一个球,用户通过移动手机来控制其移动
在整个游戏过程中,用户不会从桌面上取下手机
在开始时,球将放置在屏幕的中间:
从用户那里推电话:
应将球移向智能手机屏幕的顶部:
从球的当前位置,将手机移回用户,并向右移动:
将相应地移动球:
我仔细阅读了Android Motion Sensors Guide,但我甚至没有意识到我应该使用Sensor
\ Sensors
。
我很想得到任何指示。
答案 0 :(得分:3)
首先,TYPE_LINEAR_ACCELERATION,TYPE_ROTATION_VECTOR,TYPE_GRAVITY不是物理传感器,而是由传感器融合制成。
其次来自Android 4+这些融合传感器使用设备陀螺仪,因此如果移动设备没有陀螺仪,它们将不会工作。
因此,如果您想为所有手机制作通用应用程序,只使用加速度计(TYPE_ACCELEROMETER)。
现在针对您的情况,因为用户不会从桌面上取下手机,如果您需要,您可以轻松地从加速度计中减去重力分量。见http://developer.android.com/reference/android/hardware/SensorEvent.html 在Sensor.TYPE_ACCELEROMETER部分下。 (代码也是如此)。
现在您可以看到How can I find distance traveled with a gyroscope and accelerometer?找到线性位移&第一个答案表明他们没有使用陀螺仪。 (或者你可以谷歌找到加速度计读数的位移/线速度)
希望这一切都会给你很多想法。
答案 1 :(得分:1)
really difficult使用智能手机具有的传感器类型进行此类线性位置感应。加速度是位置相对于时间的二阶导数。所以从理论上讲,你可以使用加速度计数据,在时间上两次积分来实现绝对位置。在实践中,噪声会使计算不准确。
另一方面,如果你真的在谈论将相机面朝下放在桌子上,也许你可以想出一些聪明的方法来使用OpenCV's optical flow features来检测使用相机的动作,就像光学一样老鼠。我不知道你会如何点亮表面(闪光灯可能会烧坏电池)但是可能会解决问题。