I'm trying to develop sort of typing trainer using libgdx and stuck with this kind of problem. I need a way to detect what key user pressed to rather display it (if it was a letter) or clear input (if it was space key). I've come up with this solution:
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);
}
Feels like there should be more elegant way. I'm looking for something like this:
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);
}
}
Or maybe there is another simpler way to do this. Any suggestions?
You can create your own InputListener and override the keyDown method which sends the keycode with the event.
InputListener il = new InputListener(){
@Override
public boolean keyDown(InputEvent event, int keycode) {
typeArea.append(Keys.toString(keycode));
return super.keyDown(event, keycode);
}
};
Or you could implement an InputProcessor and use the Override the KeyDown method from that.
Implement the InputProcessor interface in your class then set the input processor to your class
Gdx.input.setInputProcessor(this);
And override the keyDown method
@Override
public boolean keyDown(InputEvent event, int keycode) {
typeArea.append(Keys.toString(keycode));
return super.keyDown(event, keycode);
}