Я написал код для управления движением маленького прямоугольника на экране с помощью JavaFX.По сути, я плавно перемещаю игрока по игровому циклу с помощью следующих кодов:
(PS: игрок - мой объект)
player.setTranslateX(player.getTranslateX() + player.velocityX);
player.setTranslateY(player.getTranslateY() + player.velocityY);
И это привязки клавиш:
myScene.setOnKeyPressed(e -> {
Thread t1;
t1 = new Thread(new Runnable() {
@Override
public void run() {
switch(e.getCode()) {
case A:
player.velocityX = -1;
break;
case D:
player.velocityX = 1;
break;
case W:
player.velocityY = -1;
break;
case S:
player.velocityY = 1;
break;
}
}
});
t1.start();
})
Разблокировка клавиш:
myScene.setOnKeyReleased(e -> {
Thread t2;
t2 = new Thread(new Runnable() {
@Override
public void run() {
switch(e.getCode()) {
case A:
player.velocityX = 0;
break;
case D:
player.velocityX = 0;
break;
case W:
player.velocityY = 0;
break;
case S:
player.velocityY = 0;
break;
}
}
});
t2.start();
})
Работает нормально, но есть ошибка, что при одновременном нажатии нескольких клавиш и отпускании одной из них объекты перестают двигаться, пока я не отпущу палецвыключите клавишу и нажмите клавишу еще раз.Теперь я знаю, что это как-то связано с концепцией неоднозначности, но я попал в кирпичную стену и открыт для идей.