java - 在按键时获取键码和键修饰符

标签 java libgdx

当用户按下组合键时,我需要获取键的代码和修饰键(CtrlAltShift 等)当前按下,并根据此选择适当的 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/

相关文章:

java - 来自 LibGDX 中 texturepacker 的纹理

java - Travis CI - 在非 headless (headless)环境中运行 LWJGL 测试?

Java Swing : Anchor images to the corners of a JFrame

java - 我正在尝试从广播接收器发出 API 请求,有人能提到正确的方法吗?

java - Java 流上的聚合操作如何工作?

java - hibernate 问题

java - 在 LibGDX 中逐像素绘制形状

java - Intellij Idea lib文件夹导出

java - libGDX:在屏幕上移动多边形

java - `notifyDataSetChanged` 我错过了什么?