我试图使用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);
}
}
或许还有另一种更简单的方法可以做到这一点。有什么建议吗?
答案 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);
}