1

我是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;
          }

}

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

如果您能帮助我,请提前非常感谢您。

4

1 回答 1

2

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

您将需要在读数后实施某种低通滤波器。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 的较小值将获得更嘈杂的读数,但响应更快。

好机会!

于 2012-12-18T15:25:41.637 回答