I'm trying to move a rectangular over the screen with WASD. My problem is that when the user tries to change the direction of the paddle twice too fast (let's say you press left, then right and left again super fast), the object freezes for a split second, and continues to move along its direction.. I'm open for ideas on how to fix it. Thank you.
Global variables
int velocityX = 0;
int velocityY = 0;
Boolean flagA = false;
Boolean flagD = false;
Boolean flagW = false;
Boolean flagS = false;
Sprite player = new Sprite(100, 100, 60, 60, "player", Color.BLACK);
Thread t1;
Thread t2;
Thread t3;
Thread definitions for movement (seOnKeyPressed)
t1 = new Thread(new Runnable() {
@Override
public void run() {
while(true) {
scene.setOnKeyPressed(e -> {
switch(e.getCode()) {
case A:
flagA = true;
player.velocityX = -1;
break;
case D:
flagD = true;
player.velocityX = 1;
break;
case W:
flagW = true;
player.velocityY = -1;
break;
case S:
flagS = true;
player.velocityY = 1;
break;
}
});
}
}
});
Thread definition (setOnKeyReleased)
t2 = new Thread(new Runnable() {
@Override
public void run() {
while(true) {
scene.setOnKeyReleased(e -> {
switch(e.getCode()) {
case A:
flagA = false;
player.velocityX = 0;
break;
case D:
flagD = false;
player.velocityX = 0;
break;
case W:
flagW = false;
player.velocityY = 0;
break;
case S:
flagS = false;
player.velocityY = 0;
break;
}
});
}
}
});
AnimationTimer for updating object's location on the screen
AnimationTimer timer = new AnimationTimer() {
@Override
public void handle(long now) {
player.setTranslateX(player.getTranslateX() + player.velocityX);
player.setTranslateY(player.getTranslateY() + player.velocityY);
}
};
Starting the program
//Starting threads
t1.start();
t2.start();
//AnimationTimer for updating X & Y location
timer.start();