如何获取任何按下的键值

时间:2017-05-18 07:53:53

标签: java input libgdx

我试图使用libgdx开发一种打字训练器,并坚持这种问题。我需要一种方法来检测按下哪个键用户而不是显示它(如果它是一个字母)或清除输入(如果它是空格键)。我已经提出了这个解决方案:

StringBuilder typeArea = new StringBuilder();
if (Gdx.input.isKeyJustPressed(Input.Keys.A)) {
    typeArea.append(Input.Keys.toString(Input.Keys.A));
} else if (Gdx.input.isKeyJustPressed(Input.Keys.B)) {
    typeArea.append(Input.Keys.toString(Input.Keys.B));
} else if ... {
          ...
} else if (Gdx.input.isKeyJustPressed(Input.Keys.SPACE)) {
    typeArea.setLength(0);
}

感觉应该有更优雅的方式。我正在寻找这样的事情:

String letters = "abcdefg...";
StringBuilder typeArea = new StringBuilder();
if (Gdx.input.isKeyJustPressed(Input.Keys.ANY_KEY)) {
    if (letters.indexOf(getKeyPressedValue()) >= 0) {
        typeArea.append(getPressedKeyValue());
    } else if (getKeyPressedValue() == Input.Keys.SPACE) {
        typeArea.setLength(0);
    }
} 

或许还有另一种更简单的方法可以做到这一点。有什么建议吗?

1 个答案:

答案 0 :(得分:1)

您可以创建自己的InputListener并覆盖keyDown方法,该方法使用事件发送键代码。

InputListener il = new InputListener(){
        @Override
        public boolean keyDown(InputEvent event, int keycode) {
                typeArea.append(Keys.toString(keycode));
            return super.keyDown(event, keycode);
        }
    };

或者你可以实现一个InputProcessor并使用Override the KeyDown方法。

在您的类中实现InputProcessor接口,然后将输入处理器设置为您的类

Gdx.input.setInputProcessor(this);

并覆盖keyDown方法

@Override
public boolean keyDown(InputEvent event, int keycode) {
    typeArea.append(Keys.toString(keycode));
    return super.keyDown(event, keycode);
}