2009-04-15 53 views
15

如何處理Java中的同時按鍵?如何處理Java中的同時按鍵?

我想寫一個遊戲,需要一次處理多個按鍵。

當我按住一個按鍵(假設向前移動),然後按住另一個按鍵(例如,向左轉動)時,會檢測到新按鍵,但舊按鍵不再被檢測到。

+1

詳情請!你想做什麼? – 2009-04-15 18:15:49

+1

不好的問題,你需要更多的細節:爲什麼環境?搖擺? AWT? 「處理」是什麼意思? – 2009-04-15 18:19:01

回答

15

一種方法是跟蹤自己正在關閉哪些鍵。

當您得到keyPressed事件時,將新密鑰添加到列表中;當您收到keyreleased事件時,請從列表中刪除密鑰。

然後在您的遊戲循環中,您可以根據鍵列表中的內容執行操作。

+0

這似乎並不是什麼黑客行爲。 (很明顯,關注焦點有一些小問題 - 我猜想所有的焦點都在獲得/失去。) – 2009-04-15 18:39:29

+0

@MichaelMyers你是如何解釋鍵重複的,如果我按住一個鍵就像一個pryamid一樣:a | a,a | a,a,a | a,a,a,a | a,a,a | a,a |一個 – KisnardOnline 2012-08-03 14:58:41

2

一般而言,您所描述的內容可以使用bitmasks來實現。

3

下面是說明如何在按下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. */ 

}