JavaFX обрабатывает только один KeyCode в обработчике событий.Таким образом, нет способа проверить наличие нескольких кодов ключей из объекта keyevent.Однако он обрабатывает все коды клавиш, которые нажимаются последовательно.Поэтому, если вы одновременно нажимаете A & B, он обрабатывает события для A & B в порядке их нажатия.Поэтому, пользуясь этой функцией, мы можем немного подправить и обработать обработку событий нажатия нескольких клавиш.
Учитывая ваш пример, продолжайте регистрировать все коды клавиш (в наборе), которые проходят через обработчик нажатых событий, и выполняйте ваши действия.логика соответственно.И убедитесь, что очищенный набор ключей отпущен.Таким образом, мы можем узнать, какие клавиши нажаты вместе.
Ниже приведен код, который демонстрирует мое объяснение выше.И это сработало в вашем примере:)
final List<KeyCode> acceptedCodes = Arrays.asList(KeyCode.S, KeyCode.W, KeyCode.UP, KeyCode.DOWN);
final Set<KeyCode> codes = new HashSet<>();
scene.setOnKeyReleased(e -> codes.clear());
scene.setOnKeyPressed(e -> {
if (acceptedCodes.contains(e.getCode())) {
codes.add(e.getCode());
if (codes.contains(KeyCode.W)) {
if (player1.getY() - 3 >= 0) {
player1.setY(player1.getY() - 4);
}
} else if (codes.contains(KeyCode.S)) {
if (player1.getY() + 53 <= 400) {
player1.setY(player1.getY() + 4);
}
}
if (codes.contains(KeyCode.UP)) {
if (player2.getY() - 3 >= 0) {
player2.setY(player2.getY() - 4);
}
} else if (codes.contains(KeyCode.DOWN)) {
if (player2.getY() + 53 <= 400) {
player2.setY(player2.getY() + 4);
}
}
}
});