3
這是鍵盤限制問題嗎?爲什麼在多鍵組合過程中沒有捕捉到某些按鍵?
我遇到了一些問題,我只是在玩弄一些代碼。想象一下自上而下的太空射手。我遇到的問題是,在我的電腦上,當我按住左箭頭和右箭頭時,我無法拍攝(空格鍵)。任何其他方向(上,下,左,右,上+右,右+下,左+下)都可以工作。我有一位朋友在他的電腦上運行代碼,他發現除了+右+右+下,所有方向都起作用了,但是+左對他工作正常。我們都查看了代碼,無法弄清楚。這可能是硬件問題嗎?
基本上,這是我在做什麼:
import javax.swing.*;
import java.awt.event.*;
public class Test extends JFrame
{
boolean up, down, left, right, fire;
// Main constructor
public Test()
{
// listeners for user input
this.addKeyListener(new KeyAdapter()
{
public void keyPressed(KeyEvent e)
{
switch (e.getKeyCode())
{
case KeyEvent.VK_UP:
{
up = true;
break;
}
case KeyEvent.VK_LEFT:
{
left = true;
break;
}
case KeyEvent.VK_RIGHT:
{
right = true;
break;
}
case KeyEvent.VK_DOWN:
{
down = true;
break;
}
case KeyEvent.VK_SPACE:
{
fire = true;
break;
}
case KeyEvent.VK_ESCAPE:
{
// Exit
System.exit(0);
}
}
}
public void keyReleased(KeyEvent e)
{
// Upon releasing key, stop direction
switch(e.getKeyCode())
{
case KeyEvent.VK_UP:
{
up = false;
break;
}
case KeyEvent.VK_LEFT:
{
left = false;
break;
}
case KeyEvent.VK_RIGHT:
{
right = false;
break;
}
case KeyEvent.VK_DOWN:
{
down = false;
break;
}
}
}
});
}
public static void main(String[] args)
{
// create frame
Test test = new Test();
test.setLocationRelativeTo(null);
test.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
test.setVisible(true);
test.loop();
}
public void loop()
{
Timer timer = new Timer(250, new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
if (up)
System.out.println("Moving UP.");
if (left)
System.out.println("Moving LEFT.");
if (right)
System.out.println("Moving RIGHT.");
if (down)
System.out.println("Moving DOWN.");
if (fire)
{
System.out.println("FIRING.");
fire = false;
}
}
});
timer.start();
}
}
這個問題最初是問here。
您的操作系統或JVM版本是否有區別?哪些操作系統的按鍵觸發不同。最好的事情可能是看看是否有什麼關鍵事件被解僱並從那裏開始。此外,像Slick2D這樣的圖書館可以幫助你抽象出這些奇怪的事情。 – jefflunt 2012-01-06 14:24:25