2012-12-18 102 views
1

我是Android游戏开发的初学者,我开发了一个小游戏。 运动传感器:加速度计我遇到了一些困难。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; 
      } 

} 

所以我的代码工作(有点),但我的角色的动作是不光滑的。有时我的手机会倾斜,但我的角色不会移动...

非常感谢您提前帮助我。

回答

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的较小值将获得更噪音的读数,但具有更快的响应。

Bonne的机会!

+0

好的,我会试试这个,我会告诉你,如果它真的更好。非常感谢你的帮助。 –