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
}
用户只能移动或射击,不能一次移动或射击。例如,如果用户按住向右箭头以向右移动并按空格,则用户将停止。
答案 0 :(得分:1)
使用类级别的属性集合来确定要按下的其他键。您将必须实现在迭代列表的keyPressed
函数中按下多个键的逻辑。还要从keyReleased
函数的列表中删除密钥。
答案 1 :(得分:0)
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();
请注意,KeyEvent.VK_A
的使用使生活变得更加简单。
另外,请确保您的线程中具有sleep(),因为如果只是while(true),则循环中将不会执行任何操作。