所以我有一个keyListener,我终于克服了键盘输入延迟。我现在有一个新问题,当用户按下“UP”箭头键移动“UP”时,他们移动“UP”只要他们想要的时间,然后当用户按下“DOWN”箭头键时,(同时仍然按住“UP”箭头键)他们移动“DOWN”。
如何让他们在释放“向下”箭头键后再次移动“向上”,而不必再次按“向上”键?
(注意:在整个过程中按“UP”键。)
这是我目前用于监听输入的代码。
private void keyListeners(){
GlobalObjects.frame.addKeyListener(new KeyListener() {
@Override
public void keyPressed(KeyEvent e) {
//Up = 1
//Down = 2
//Left = 3
//Right = 4
if(e.getKeyCode() == 38){
System.out.println("UP KEY PRESSED");
player.setPlayerMovement(1);
}else if(e.getKeyCode() == 40){
System.out.println("DOWN KEY PRESSED");
player.setPlayerMovement(2);
}else if(e.getKeyCode() == 37){
player.setPlayerMovement(3);
}else if(e.getKeyCode() == 39){
player.setPlayerMovement(4);
}
}
@Override
public void keyReleased(KeyEvent e) {
if(e.getKeyCode() == 38){
if(player.getPlayerMovement() != 1){
System.out.println("UP KEY released, but some other arrow key changed the playermovement to a different number (do nothing)");
}else{
System.out.println("UP Key was a the last key pressed, therefore its safe to set player movement to "0" (not moving)");
player.setPlayerMovement(0);
}
}else if(e.getKeyCode() == 40){
if(player.getPlayerMovement() != 2){
}else{
player.setPlayerMovement(0);
}
}else if(e.getKeyCode() == 37){
if(player.getPlayerMovement() != 3){
}else{
player.setPlayerMovement(0);
}
}else if(e.getKeyCode() == 39){
if(player.getPlayerMovement() != 4){
}else{
player.setPlayerMovement(0);
}
}
}
@Override
public void keyTyped(KeyEvent e) {
}
});
}
如果您看不出来,这是一款基于 2D 角色扮演游戏的游戏。(如果这有帮助,请回答问题)