【发布时间】:2010-10-19 16:11:43
【问题描述】:
如何在 Java 中处理同时按下的按键?
我正在尝试编写游戏,需要同时处理多个按键。
当我按住一个键(假设向前)然后按住另一个键(例如左转)时,会检测到新键,但不再检测到旧按键。
【问题讨论】:
-
更多细节,请!你想做什么?
-
不好的问题,你需要更多细节:为什么是环境?摇摆? AWT? “句柄”是什么意思?
如何在 Java 中处理同时按下的按键?
我正在尝试编写游戏,需要同时处理多个按键。
当我按住一个键(假设向前)然后按住另一个键(例如左转)时,会检测到新键,但不再检测到旧按键。
【问题讨论】:
一种方法是跟踪自己当前关闭了哪些键。
当你得到一个 keyPressed 事件时,将新的键添加到列表中;当您收到 keyReleased 事件时,从列表中删除该键。
然后在您的游戏循环中,您可以根据键列表中的内容执行操作。
【讨论】:
一般来说,您所描述的可以使用bitmasks来实现。
【讨论】:
这是一个代码示例,说明如何在按下 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. */
}
【讨论】: