Я делаю игру с javafx и пытаюсь реализовать проверку ввода. Он устанавливает свойства сцены onKeyPressed и onKeyReleased, но проблема в том, что вызываются только события onKeyPressed.
Я пытался использовать requestFocus () на корневой панели, я пытался использовать объекты EventHandler вместоЛямбда, я попытался поместить setOnKeyReleased в нескольких местах, и я попытался изменить узел, на который я положил OnKeyReleased. Я посмотрел и не нашел никого, кто имел бы ту же проблему, только разные проблемы с похожими симптомами.
РЕДАКТИРОВАТЬ: Это не работает, только когда сцена в полноэкранном режиме. Я вытащил его из полноэкранного режима случайно, только чтобы убедиться, что он вдруг работает. Почему полноэкранный режим предотвращает вызов событий onKeyReleased? Как мне обойти это?
Класс ввода:
public final class Input {
private static ArrayList<String> pressed = new ArrayList<>(KeyCode.values().length);
public static boolean isKeyDown(KeyCode key) {
return pressed.contains(key.getName());
}
public static void init() {
Main.getScene().setOnKeyPressed(event -> {
String code = event.getCode().getName();
System.out.println("key pressed: "+code); //prints
if (!pressed.contains(code)) pressed.add(code);
event.consume();
});
Main.getScene().setOnKeyReleased(event -> {
String code = event.getCode().getName();
System.out.println("key released: "+code); //does not print, in fact none of the code in this block ever runs
pressed.remove(code);
event.consume();
});
}
}
Input.init () вызывается после того, как вы закончили выбирать своего персонажа и новая корневая панель была полностью настроена.
Нет сообщений об ошибках или чего-то еще, и я попытался поместить println () в местах внутри и вокруг setOnKeyReleased, и все вокруг него работает нормально, но когда полноэкранный режим ничего внутри лямбды onKeyReleased не запускается.