下面列出了android.view.KeyEvent#isGamepadButton ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
/**
* @return True if event's keycode corresponds to a gamepad key.
*/
public static boolean isGamepadEvent(KeyEvent event) {
int keyCode = event.getKeyCode();
switch (keyCode) {
// Specific handling for dpad keys is required because
// KeyEvent.isGamepadButton doesn't consider dpad keys.
case KeyEvent.KEYCODE_DPAD_UP:
case KeyEvent.KEYCODE_DPAD_DOWN:
case KeyEvent.KEYCODE_DPAD_LEFT:
case KeyEvent.KEYCODE_DPAD_RIGHT:
return true;
default:
return KeyEvent.isGamepadButton(keyCode);
}
}
private static boolean isJoystickButton(int keyCode) {
switch (keyCode) {
case KeyEvent.KEYCODE_DPAD_CENTER:
case KeyEvent.KEYCODE_DPAD_LEFT:
case KeyEvent.KEYCODE_DPAD_RIGHT:
case KeyEvent.KEYCODE_DPAD_DOWN:
return true;
default:
return KeyEvent.isGamepadButton(keyCode);
}
}
private static boolean isGameKey(int keyCode) {
switch (keyCode) {
case KeyEvent.KEYCODE_DPAD_UP:
case KeyEvent.KEYCODE_DPAD_DOWN:
case KeyEvent.KEYCODE_DPAD_LEFT:
case KeyEvent.KEYCODE_DPAD_RIGHT:
case KeyEvent.KEYCODE_DPAD_CENTER:
case KeyEvent.KEYCODE_SPACE:
return true;
default:
return KeyEvent.isGamepadButton(keyCode);
}
}
@Override
public boolean onKey (View view, int keyCode, KeyEvent keyEvent) {
if (ignoreNoGamepadButtons && !keyEvent.isGamepadButton(keyCode)) {
return false;
}
AndroidController controller = controllerMap.get(keyEvent.getDeviceId());
if(controller != null) {
if(controller.getButton(keyCode) && keyEvent.getAction() == KeyEvent.ACTION_DOWN) {
return true;
}
synchronized(eventQueue) {
AndroidControllerEvent event = eventPool.obtain();
event.controller = controller;
if(keyEvent.getAction() == KeyEvent.ACTION_DOWN) {
if (keyCode == KeyEvent.KEYCODE_DPAD_UP) {
event.type = AndroidControllerEvent.POV;
controller.pov |= 0x00000001;
event.povDirection = controller.getPov(0);
} else if (keyCode == KeyEvent.KEYCODE_DPAD_DOWN) {
event.type = AndroidControllerEvent.POV;
controller.pov |= 0x00000010;
event.povDirection = controller.getPov(0);
} else if (keyCode == KeyEvent.KEYCODE_DPAD_RIGHT) {
event.type = AndroidControllerEvent.POV;
controller.pov |= 0x00000100;
event.povDirection = controller.getPov(0);
} else if (keyCode == KeyEvent.KEYCODE_DPAD_LEFT) {
event.type = AndroidControllerEvent.POV;
controller.pov |= 0x00001000;
event.povDirection = controller.getPov(0);
} else {
event.type = AndroidControllerEvent.BUTTON_DOWN;
event.code = keyCode;
}
} else {
if (keyCode == KeyEvent.KEYCODE_DPAD_UP) {
event.type = AndroidControllerEvent.POV;
controller.pov &= 0x00001110;
event.povDirection = controller.getPov(0);
} else if (keyCode == KeyEvent.KEYCODE_DPAD_DOWN) {
event.type = AndroidControllerEvent.POV;
controller.pov &= 0x00001101;
event.povDirection = controller.getPov(0);
} else if (keyCode == KeyEvent.KEYCODE_DPAD_RIGHT) {
event.type = AndroidControllerEvent.POV;
controller.pov &= 0x00001011;
event.povDirection = controller.getPov(0);
} else if (keyCode == KeyEvent.KEYCODE_DPAD_LEFT) {
event.type = AndroidControllerEvent.POV;
controller.pov &= 0x00000111;
event.povDirection = controller.getPov(0);
} else {
event.type = AndroidControllerEvent.BUTTON_UP;
event.code = keyCode;
}
}
eventQueue.add(event);
}
if (keyCode == KeyEvent.KEYCODE_BACK && !Gdx.input.isCatchBackKey()) {
return false;
}
return true;
} else {
return false;
}
}
private static boolean isFireKey(int keyCode) {
return KeyEvent.isGamepadButton(keyCode)
|| keyCode == KeyEvent.KEYCODE_DPAD_CENTER
|| keyCode == KeyEvent.KEYCODE_SPACE;
}
/**
* Any gamepad button + the spacebar or DPAD_CENTER will be used as the fire
* key.
*
* @param keyCode
* @return true of it's a fire key.
*/
private static boolean isFireKey(int keyCode) {
return KeyEvent.isGamepadButton(keyCode)
|| keyCode == KeyEvent.KEYCODE_DPAD_CENTER
|| keyCode == KeyEvent.KEYCODE_SPACE;
}