2012-01-06 56 views
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

+0

您的操作系統或JVM版本是否有區別?哪些操作系統的按鍵觸發不同。最好的事情可能是看看是否有什麼關鍵事件被解僱並從那裏開始。此外,像Slick2D這樣的圖書館可以幫助你抽象出這些奇怪的事情。 – jefflunt 2012-01-06 14:24:25

回答

1

是的,它看起來像一個硬件限制。您可以嘗試檢查它在其他程序中的行爲是否相同,如果是,那肯定是硬件問題。請參閱Rollover (key)

相關問題