当用户按下组合键时,我需要获取键的代码和修饰键(Ctrl
、Alt
、Shift
等)当前按下,并根据此选择适当的 react 。有没有比以下更清洁的方法来做到这一点? (使用 InputProcessor#keyDown ):
public boolean keyDown(int keycode) {
boolean ctrl, alt, shift, ...;
if (Gdx.input.isKeyPressed(Input.Keys.LEFT_SHIFT) || Gdx.input.isKeyPressed(Input.Keys.RIGHT_SHIFT)) {
shift = true;
} else if (/* same for ctrl */) {
ctrl = true;
} else /* same for other modifiers */ {
//...
}
// Finally, choose an action based on the key combination pressed
if (shift && keycode == Input.Keys.A) {
// What to do if Shift+A is pressed
} else if (/* and so on */) {
//...
}
}
我看到有 Input.Keys.META_*
位掩码,这可能是我需要的,但我还没有找到任何关于如何使用它们的示例。
最佳答案
您可以使用 keyDown()
方法来检测是否按下了 shift(或任何其他修改键)以及是否再次释放了 keyUp()
方法:
class MyInputProcesses extends InputProcesses {
boolean shift = false;
// etc...
public boolean keyDown(int keycode) {
switch(keycode) {
case Input.Keys.LEFT_SHIFT :
case Input.Keys.RIGHT_SHIFT:
shift = true;
break;
case Input.Keys.A:
if(shift) {
// Do something if Shift+A is pressed
}
break;
}
// etc...
}
public boolean keyUp(int keycode) {
switch(keycode) {
case Input.Keys.LEFT_SHIFT :
case Input.Keys.RIGHT_SHIFT:
shift = false;
break;
// etc...
}
}
}
该方法可以防止您询问修改键的状态,并且更容易修改这些键的触发器(例如,只接受左移)。
我猜这个解决方案是否更好/更好是个人喜好。我怀疑这会不会(明显)更快。
关于java - 在按键时获取键码和键修饰符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20692838/