2010-08-02 4 views
1

안녕하세요, Android 개발을 배우기 시작하고 문제가 발생했습니다.안드로이드 게임 만들기, 키 입력이 이상하게 X10 Mini Pro에 등록됨

나는 가상 장치에 대한 작업을 만들고있어 게임의 제어,하지만 전화 :

  • 나는 프로 엑스 페리아 X10 미니를 가지고 내가 이드 소프트웨어를 배우고 기본적인 탁구 게임을 만들고 있어요
  • 개발
  • 게임은 내 안드로이드 가상 장치에서 잘 작동합니다. 패들을 위아래로 부드럽게 움직일 수 있습니다.
  • 휴대 전화에서 버튼을 놓을 때까지 또는 onKeyDown 이벤트가 실행되지 않는다고 생각했습니다. 버튼을 두 번째 또는 두 번째로 누르고 있었지만 그 다음에는 버튼을 짧게 눌렀을 때와 같지 않음.
  • 나는 일부 휴대 전화가 빠르게 누르면 특수 문자에 빠르게 액세스 할 수 있다고 생각한다.

    • 게임은 많이 내장되어 있습니다 :이 결과
    • 문제는

    나는 또한 추가 할 수있는 게임을 일시 정지처럼, 나는 패를 이동할 수 없습니다,하지만 난 하나를 누릅니다 일을 할 수 있다는 것입니다 SDK의 샘플 앱 LunarLander 주변

  • 달 착륙선은 가상 장치에서 잘 작동하지만 내 휴대폰에 넣을 때

가 어떻게 그것을해야 같은 이벤트를 onKeyDown에 등록 내 전화를 강제 할 수 내 탁구와 같은 문제가? 스레드 내에서

@Override 
public boolean onKeyDown(int keyCode, KeyEvent msg) { 
    return thread.doKeyDown(keyCode, msg); 
} 

@Override 
public boolean onKeyUp(int keyCode, KeyEvent msg) { 
    return thread.doKeyUp(keyCode, msg); 
} 

코드 :

boolean doKeyDown(int keyCode, KeyEvent msg) { 
    synchronized (mSurfaceHolder) { 
     mP1Score = keyCode;//For debugging 
     boolean okStart = false; 
     if (keyCode == KeyEvent.KEYCODE_SPACE) okStart = true; 
     if (mMode == STATE_PAUSE && okStart) { 
      setState(STATE_RUNNING); 
      return true; 
     } else if (mMode == STATE_READY && okStart) { 
      setState(STATE_RUNNING); 
      return true; 
     } else if (mMode == STATE_GOAL && okStart) { 
      return true; 
     }else if (mMode == STATE_END_GAME && okStart) { 
      doStart(); 
      return true; 
     } else if (mMode == STATE_RUNNING) { 
      if (keyCode == KeyEvent.KEYCODE_Q) { 
       mP1dY = -PLAYER_SPEED;//Player 1 up 
       return true; 
      } else if (keyCode == KeyEvent.KEYCODE_A) { 
       mP1dY = PLAYER_SPEED;//Player 1 down 
       return true; 
      } else if (keyCode == KeyEvent.KEYCODE_O) { 
       mP2dY = -PLAYER_SPEED;//Player 2 up 
       return true; 
      } else if (keyCode == KeyEvent.KEYCODE_L) { 
       mP2dY = PLAYER_SPEED;//Player 2 down; 
       return true; 
      } else if (keyCode == KeyEvent.KEYCODE_SPACE) { 
       pause();//Space is pressed in game 
       return true; 
      } 
     } 
     return false; 
    } 
} 

boolean doKeyUp(int keyCode, KeyEvent msg) { 
    boolean handled = false; 
    mP2Score = keyCode;//For debugging 
    synchronized (mSurfaceHolder) { 
     if (mMode == STATE_RUNNING) { 
      if (keyCode == KeyEvent.KEYCODE_Q 
        || keyCode == KeyEvent.KEYCODE_A) { 
       mP1dY = 0; 
       handled = true; 
      } else if (keyCode == KeyEvent.KEYCODE_O 
        || keyCode == KeyEvent.KEYCODE_L) { 
       mP2dY = 0; 
       handled = true; 
      } 
     } 
    } 
    return handled; 
} 

Complete source available here

서피스 뷰 SurfaceView를 확장 내보기 클래스에서

코드 (? 또는 가상 장치는 않습니다 적어도 같은)

+0

키 이벤트를 수신하는 코드를 게시 할 수 있습니까? – CaseyB

+0

코드가 질문에 추가됨 ^ – Tobias

답변

0

다음은 일종의 해결책입니다.

문제는 X10 Mini Pro에서 SE의 기본 입력 방법입니다. 전화 (HTC_IME 제 경우)에 다른 입력 방법을 설치하면 가상 장치에서와 마찬가지로 작동하도록 컨트롤을 얻을 수 있습니다.

이제 기본 입력기로 작동시키는 방법 만 알아 내면 완성 된 솔루션을 얻을 수 있습니다.