如何处理Java中的同时按键?
如何处理Java中的同时按键?
我试图写一个游戏,需要一次处理多个按键。
当我按住一个键(假设向前移动),然后按住另一个键(例如,向左转)时,将检测到新的键,但是旧的按键不再被检测到。
一种方法是跟踪自己正在closures哪些键。
当你得到一个keyPressed事件时,将新的密钥添加到列表中; 当您收到keyreleased事件时,请从列表中删除该密钥。
然后在游戏循环中,您可以根据键列表中的内容进行操作。
下面是一个代码示例,说明如何按CTRL + Z时执行一个操作:
import java.awt.*; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; class p4 extends Frame implements KeyListener { int i=17; int j=90; boolean s1=false; boolean s2=false; public p4() { Frame f=new Frame("Pad"); f.setSize(400,400); f.setLayout(null); Label l=new Label(); l.setBounds(34,34,88,88); f.add(l); f.setVisible(true); f.addKeyListener(this); } public static void main(String arg[]){ new p4(); } public void keyReleased(KeyEvent e) { //System.out.println("re"+e.getKeyChar()); if(i==e.getKeyCode()) { s1=false; } if(j==e.getKeyCode()) { s2=false; } } public void keyTyped(KeyEvent e) { //System.out.println("Ty"); } /** Handle the key pressed event from the text field. */ public void keyPressed(KeyEvent e) { System.out.println("pre"+e.getKeyCode()); if(i==e.getKeyCode()) { s1=true; } if(j==e.getKeyCode()) { s2=true; } if(s1==true && s2==true) { System.out.println("EXIT NOW"); System.exit(0); } } /** Handle the key released event from the text field. */ }
一般来说,你所描述的可以使用位掩码来实现。