java - 如何获取任意按下的键值

标签 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);
    }
} 

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

最佳答案

您可以创建自己的 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 接口(interface),然后将输入处理器设置为您的类

Gdx.input.setInputProcessor(this);

并重写 keyDown 方法

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

关于java - 如何获取任意按下的键值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44041775/

相关文章:

c# - 在c#中从控制台输入多行

gradle - libgdx一段时间后无法加载纹理

java - OpenGL 顶点着色器精度问题

java - 本地文件在更新后还能保存吗? (LibGDX)

jquery - 当文本太长时,在文本框中使用 jQuery 模拟 "typing text"

Java/Android : Append multiple strings, 如果字符串为空则跳过

java - 如何处理自定义HandlerMethodArgumentResolver抛出的异常?

java - 一个最小的 Java 程序应该是什么样子的?

c - 一行输入多个int,返回int的个数

java - 是否有一个公共(public)位置包含所有 Spring XML 的声明