2012-12-18 3 views
1

저는 Android 게임 개발의 초보자이며 작은 게임을 개발 중입니다. Motion Sensor : Accelerometer에 어려움을 겪고 있습니다.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 chance!

+0

좋아요, 그렇게 해보겠습니다. 실제로 더 잘 작동하는지 알려 드리겠습니다. 도와 주셔서 대단히 감사합니다. –