Java 使用KeyListener同时接受2个键盘输入

Java 使用KeyListener同时接受2个键盘输入,java,awt,keylistener,Java,Awt,Keylistener,使用此功能,用户只能移动或拍摄,而不能同时移动或拍摄。例如,如果用户按住向右箭头向右移动并按空格键,则用户将停止。使用类级属性集合来确定按下了哪些其他键。在迭代列表的keyPressed函数中,您必须为按下的多个键实现逻辑。还可以从keyreased功能的列表中删除钥匙 public void keyPressed(KeyEvent e) { if (e.getKeyCode() == 32){ //spacekey if (menu.isRun == true){ //

使用此功能,用户只能移动或拍摄,而不能同时移动或拍摄。例如,如果用户按住向右箭头向右移动并按空格键,则用户将停止。

使用类级属性集合来确定按下了哪些其他键。在迭代列表的
keyPressed
函数中,您必须为按下的多个键实现逻辑。还可以从
keyreased
功能的列表中删除钥匙

public void keyPressed(KeyEvent e) {
    if (e.getKeyCode() == 32){ //spacekey
        if (menu.isRun == true){ //Checks if menu is active or not
            if (framecount > 10){ //Prevents too many missiles
                instance.player.spaceKeyPressed();
                framecount = 0;
            }
        }
        menu.isRun = true; //sets menu to inactive
        if (toggle != true){//prevents reopening game after a game over
            if (menu.spaceKeyPressed()){
                instance.CanRun = true; //loads game
                toggle = true;
                menu.update();//updates menu
            }
        }
    }
    if (e.getKeyCode() == 39) instance.player.rightKeyPressed();//right key moves player right
    if (e.getKeyCode() == 37) instance.player.leftKeyPressed(); //left key moves player left
}
注意
KeyEvent.VK_A
的用法,它使生活变得更加简单。 另外,请确保线程中有sleep(),因为如果是while(true),则循环中的任何内容都不会执行

如果(例如getKeyCode()==KeyEvent.VK_RIGHT),则编写
,而不是测试39。您的代码将更容易理解。@VGR“您的代码将更容易理解。”我还使用常量进行编译时健全性检查。编译器不会选择
93
而不是
39
,但它会检测到
KeyEvent.VK\u RIHGT
有问题。
boolean keyA=false;
boolean keyD=false;

//    keys
@Override
public void keyPressed(KeyEvent e) {
    int key= e.getKeyCode();

    if(key==KeyEvent.VK_A){
        keyA=true;
    }

    if(key==KeyEvent.VK_D){
        keyD=true;
    }
}

@Override
public void keyReleased(KeyEvent e) {
    int key= e.getKeyCode();

    if(key==KeyEvent.VK_A){
        keyA=false;
    }

    if(key==KeyEvent.VK_D){
        keyD=false;
    }

//In constructor
new Thread(()->{
    while(true){
        try{Thread.sleep(10);}
        catch (InterruptedException e){}

        if(keyA)
            player.moveLeft();
        if(keyD)
            player.moveRight();
    }
}).start();