从加速度计(在 X 和 Y 轴上)获得值后,我将这些值分配给 xSpeed 和 ySpeed 变量,然后根据这些值移动球。问题是我希望在活动开始时 xSpeed 和 ySpeed 为 0(在手机移动之前球不会移动),无论加速度计的值是多少。我想做这种校准。
对于 Y 轴,我试过这个,但不适用于手机的所有起始位置。
ball.setYSpeed(ySpeed-startAccelY);
其中 startAccelY 是 Y 轴上加速度计的起始值,ySpeed 将被分配新值。
从加速度计(在 X 和 Y 轴上)获得值后,我将这些值分配给 xSpeed 和 ySpeed 变量,然后根据这些值移动球。问题是我希望在活动开始时 xSpeed 和 ySpeed 为 0(在手机移动之前球不会移动),无论加速度计的值是多少。我想做这种校准。
对于 Y 轴,我试过这个,但不适用于手机的所有起始位置。
ball.setYSpeed(ySpeed-startAccelY);
其中 startAccelY 是 Y 轴上加速度计的起始值,ySpeed 将被分配新值。
我建议您取原始起始值并从当前读数中减去它。
例如,您的代码中有一个变量:
float initialPosition = 1.4; // 1.4 is just an example, you'd set it to the reading of the accelerometer
然后,当您将当前加速度计读数应用于您的球时,您可以减去 initialPosition 值以使球移动。这样一开始,球就会出现停顿。
我希望这有帮助。
我假设您使用的是 TYPE_ACCELEROMETER 传感器?尝试改用 TYPE_LINEAR_ACCELERATION 传感器。它会自动从传感器读数中减去重力,因此如果您不移动手机,acln 将保持在 0(ish)。
[编辑] Api 9 +。