2012-12-18 99 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

好的,我會試試這個,我會告訴你,如果它真的更好。非常感謝你的幫助。 –