这个答案有两个部分。 (1)读取哪些传感器数据。 (2)如何获取你想要的运动变化信息。
(1)读取哪些传感器数据
您将从 Android 的软件衍生中获得更好的数据运动传感器 http://developer.android.com/guide/topics/sensors/sensors_motion.html(而不是仅来自加速度计),因为它们结合了来自加速度计、磁力计和(如果有)陀螺仪的信号。运动传感器还可以纠正已知的偏差,并使用卡尔曼滤波器消除噪声。陀螺仪在检测旋转变化方面比其他两个传感器更准确、更快,但它们仅检测到比某个阈值更快的变化。它们不检测绝对位置或方向。
“旋转传感器”是 Android 设备旋转相关最佳信息的软件衍生指示。我的记得是,它包括陀螺仪信号(如果可用),否则它只使用加速度计(用于测量包括重力在内的线性力)和磁力计(用于测量地球磁场内的方向)。
Caveat:《运动传感器指南》中的这一段说了一些棘手的事情:
Android 开源项目 (AOSP) 提供了三种基于软件的
运动传感器:重力传感器、线性加速度传感器和
旋转矢量传感器。这些传感器在 Android 4.0 中进行了更新,
现在使用设备的陀螺仪(以及其他传感器)来改进
稳定性和性能。 ...所有这三个传感器都依赖于
陀螺仪:如果设备没有陀螺仪,这些传感器就不会
显示且不可用。
I think这意味着在 Android 4.0 及更高版本上,这三个基于软件的传感器仅在具有陀螺仪的设备上可用,而它们始终在早期版本的 Android 上可用。在各种设备上进行一些快速测试以找出答案,然后请在此处报告。
Note:它有助于校准磁力计。通过将设备以大的 8 字形状移动几个周期来实现此目的。磁力计硬件将检测到这一点,跟踪其测量的值范围,然后调整其校准参数。
(2) 如何获取你想要的运动变化信息
要控制您的游戏角色,请考虑阅读旋转矢量传感器。绕 X 轴的旋转减去初始 X 轴旋转应指示设备相对于捕获初始旋转值时向上或向下倾斜的程度。
或者,您可以使用加速度传感器来测量用户沿设备的 Y 轴上下移动设备的距离。 Y 轴指向屏幕顶部。代码示例位于本指南页面 http://developer.android.com/guide/topics/sensors/sensors_motion.html#sensors-motion-accel展示如何使用高通滤波器减去重力。
我真正想要的是仅在以下情况下更改角色 Y 速度
沿 Y 轴的旋转速率发生变化。
这将测量一个人左右(而不是上下)倾斜手机的速度(而不是多少)。如果您需要有关值变化的数学背景,请参阅可汗学院的简短讲座衍生品[微积分,而不是金融]和积分。维基百科也应该有帮助。简而言之,通过减去参考值来计算值的变化,通过减去以固定时间间隔采样的先前值来计算变化率(例如,根据速度计算加速度),并通过求和来计算积分(例如,根据加速度计算速度)采样值。
另请参阅传感器 API 参考 http://developer.android.com/reference/android/hardware/Sensor.html和传感器事件参考 http://developer.android.com/reference/android/hardware/SensorEvent.html.