Итак, я делаю игру на Java, и сейчас я работаю с клавиатурным вводом. У меня есть настройка класса keylistener под названием KeyboardManager
и статическая функция, которая определяет, удерживается ли клавиша. вот код для этого класса:
public class KeyboardManager implements KeyListener {
public static Map<Integer, Boolean> keys;
public KeyboardManager () {
keys = new HashMap<>();
}
@Override
public void keyTyped(KeyEvent e) {
}
@Override
public void keyPressed(KeyEvent e) {
keys.put(e.getKeyCode(), true);
}
@Override
public void keyReleased(KeyEvent e) {
keys.put(e.getKeyCode(), false);
}
public static boolean isKeyDown(int key) {
if (!keys.containsKey(key)) return false;
return keys.get(key);
}
}
Функция isKeyDown
прекрасно работает, и я использую ее для перемещения игрока, но если я использую ее для открытия графического интерфейса, например, инвентаря игрока, как вы можете себе представить, она открывает и закрывает каждый тик. Я ищу способ сделать то, что у меня сейчас, но с keyTyped
вместо keyPressed
и keyReleased
. Проблема здесь, очевидно, заключается в том, что невозможно определить, когда заканчивается тип ключа. Например, в Unity, когда вы кодируете на c #, вы можете сделать что-то вроде Input.GetKeyDown("E")
, и это будет проверять тип ключа, тогда как Input.GetKey("E")
определит, удерживается ли оно. Любая помощь будет оценена.