2013-04-24 1 views
1

Mario Zechner의 Android 게임 시작 프레임 워크를 사용하여 유아 색상 학습 앱을 만듭니다. 테스트의 마지막 단계에서 사용자가 동시에 두 개의 다른 버튼 (예 : 아래의 스크린 샷에있는 '설정'및 '집'버튼)을 눌렀다가 놓으면 '색상!이 중지되었습니다'라는 사실을 발견했습니다. 알림이 나타납니다. enter image description here여러 탭으로 인해 경계를 벗어난 인덱스가 생성됨

Zechner의 프레임 워크는 입력을 개별적으로 처리하는 목록 형태로 처리합니다. 나는 문제가 코드의 @Override 갱신 영역에있는 생각 :

@Override 
public void update(float deltaTime) { 
    world.timer = world.timer + deltaTime; 

    List<TouchEvent> touchEvents = game.getInput().getTouchEvents(); 
    int len = touchEvents.size(); 

    for (int i = 0; i < len; i++) { 
     TouchEvent event = touchEvents.get(i); 

     if (event.type == TouchEvent.TOUCH_UP) { 
      // This is where the guts of my app are 
     } 
    } 
} 

로그 캣 예외가 게재되는 다음 (필자는 "잘못된 인덱스"를 사용하는 방법 많은 터치에 따라 다를 수 있습니다 것으로 나타났습니다하지만, 크기는) 항상 곁에 0 :

04-24 19:27:55.239: E/AndroidRuntime(28002): FATAL EXCEPTION: Thread-555 
04-24 19:27:55.239: E/AndroidRuntime(28002): java.lang.IndexOutOfBoundsException: Invalid index 1, size is 0 
04-24 19:27:55.239: E/AndroidRuntime(28002): at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:251) 
04-24 19:27:55.239: E/AndroidRuntime(28002): at java.util.ArrayList.get(ArrayList.java:304) 
04-24 19:27:55.239: E/AndroidRuntime(28002): at com.lilyandrosieshow.colors.GameScreen.update(GameScreen.java:153) 
04-24 19:27:55.239: E/AndroidRuntime(28002): at com.badlogic.androidgames.framework.impl.AndroidFastRenderView.run(AndroidFastRenderView.java:42) 
04-24 19:27:55.239: E/AndroidRuntime(28002): at java.lang.Thread.run(Thread.java:856) 
04-24 19:28:59.301: D/dalvikvm(28002): GC_CONCURRENT freed 482K, 4% free 15473K/16071K, paused 2ms+2ms 
04-24 19:32:55.262: I/Process(28002): Sending signal. PID: 28002 SIG: 9 
04-24 19:32:55.262: E/AndroidRuntime(28002): Handle UnCaght exceptions. KILLING PID: 28002 

나는 같은 결과

를 for 루프 전에

if (len != 0) 

을 추가하려고하지만받은

모든 도움을 주셔서 감사합니다.

+0

사용중인 Android 버전에 관계없이 단일 터치 응답 만 사용하는 방법이 있습니까? – Wayde

답변

1

game.setScreen(new HomeScreen())과 같은 호출로 "설정"및 "홈"버튼이 다른 Screen 구현으로 연결됩니다. 이 메서드 내에서 Screen 인수는 0의 델타 시간으로 업데이트됩니다. 인수 Screen의 업데이트 메소드가 게임의 UserInput 인스턴스의 이벤트에서 터치 이벤트를 가져 와서 반복하는 경우 현재 이벤트 목록은 이전 Screen에서 반복되는 이벤트 목록과 더 이상 동일하지 않습니다. 픽스는 즉시 모든 호출에서 setScreen()으로 돌아가는 것입니다. 터치 처리를 계속할 필요가 없습니다.

@Override 
public void update(float deltaTime) { 
    world.timer = world.timer + deltaTime; 

    List<TouchEvent> touchEvents = game.getInput().getTouchEvents(); 
    int len = touchEvents.size(); 

    for (int i = 0; i < len; i++) { 
     TouchEvent event = touchEvents.get(i); 

     if (event.type == TouchEvent.TOUCH_UP) { 
      if (touchingHomeButton(event)) { 
       game.setScreen(new HomeScreen()); 
       return; // return immediately 
     } 
    } 
}