使用键列表器一次接受 2 个键盘输入

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

}

这样,用户只能移动或射击,不能同时移动或射击。例如,如果用户按住向右箭头向右移动并按空格键,则用户将停止。


慕运维8079593
浏览 71回答 2
2回答

陪伴而非守候

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

小怪兽爱吃肉

boolean keyA=false;boolean keyD=false;//    keys@Overridepublic void keyPressed(KeyEvent e) {    int key= e.getKeyCode();    if(key==KeyEvent.VK_A){        keyA=true;    }    if(key==KeyEvent.VK_D){        keyD=true;    }}@Overridepublic void keyReleased(KeyEvent e) {    int key= e.getKeyCode();    if(key==KeyEvent.VK_A){        keyA=false;    }    if(key==KeyEvent.VK_D){        keyD=false;    }//In constructornew Thread(()->{    while(true){        try{Thread.sleep(10);}        catch (InterruptedException e){}        if(keyA)            player.moveLeft();        if(keyD)            player.moveRight();    }}).start();请注意,的用法使生活变得更加简单。另外,请确保线程中有 sleep(),因为如果它只是 while(true),循环中的任何内容都不会执行。KeyEvent.VK_A
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java