안녕하세요, 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를 확장 내보기 클래스에서코드 (? 또는 가상 장치는 않습니다 적어도 같은)
키 이벤트를 수신하는 코드를 게시 할 수 있습니까? – CaseyB
코드가 질문에 추가됨 ^ – Tobias