Android加速度计的困难

标签 android andengine accelerometer sensors

我是 Android 游戏开发的初学者,我正在开发一个小游戏。 我在使用运动传感器时遇到了一些困难:加速度计。

这个游戏是横向模式。 我想如果我的手机向右倾斜,我的角色也会向右倾斜。 (左边也一样) 当我停止倾斜时,游戏中的角色应该停止移动。

但我不太了解加速度计的操作,

这是我的代码:

 @Override
public void onSensorChanged(SensorEvent event) {
     synchronized (this) {
        long penchement = (long) (event.values[1]- 0.5);
          if(penchement>0){
              if(penchement>lastUpdate)
                  lastUpdate=penchement;
              if(penchement>0.2){
                  booldroite=true; // boolean for going right
                  boolgauche=false; // boolean for going left
              }
              if(lastUpdate-penchement<0.2)
                  booldroite=false;
          }
          else{
              if(penchement<lastUpdate)
                  lastUpdate=penchement;
              if(penchement<-0.2){
                  boolgauche=true;
                  booldroite=false;
              }
              if(lastUpdate+penchement>-0.2)
                  boolgauche=false;
          }

}

所以我的代码(有点)有效,但我的角色的 Action 一点也不流畅。有时我的手机倾斜但我的角色不动...

如果你能帮助我,非常感谢你。

最佳答案

传感器读数本质上是嘈杂的,这就是您的角色闪烁运动的原因。

您需要在读数后实现某种低通滤波器。 SensorEvent 中有一个基本的低通滤波器示例.

 public void onSensorChanged(SensorEvent event) {
      
      // alpha is calculated as t / (t + dT)
      // with t, the low-pass filter's time-constant
      // and dT, the event delivery rate

      final float alpha = 0.8;

      gravity[0] = alpha * gravity[0] + (1 - alpha) * event.values[0];
      gravity[1] = alpha * gravity[1] + (1 - alpha) * event.values[1];
      gravity[2] = alpha * gravity[2] + (1 - alpha) * event.values[2];

      linear_acceleration[0] = event.values[0] - gravity[0];
      linear_acceleration[1] = event.values[1] - gravity[1];
      linear_acceleration[2] = event.values[2] - gravity[2];
 }

您可能想使用 gravity[] 中的值来找出手机的“倾斜度”。此外,尝试使用 final float alpha 的值:接近 1.0 的值会提高平滑度,而接近 0.0 的较小值会获得更嘈杂的读数,但响应速度更快。

好机会!

关于Android加速度计的困难,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13935759/

相关文章:

java - Android - 加速度计跌倒检测算法

android - cocos2d-x 3.0 rc0 : develop for android in eclipse

java - 以编程方式在相对布局中添加按钮网格

android - 如何制作 BLE 网状网络?

android - 和引擎唤醒锁

android - AndEngine (Android) 中的多点触控缩放功能

安卓跌倒检测

java - 错误 : java. lang.RuntimeException:无法实例化 Activity

android.widget.Editor : NullPointerException in SpannableStringInternal

java - 如何从该数组列表中获取值并显示包含该值的文本?