2009-04-15 10 views
15

Jak obsługiwać jednoczesne naciśnięcia klawiszy w Javie?Jak obsługiwać jednoczesne naciśnięcia klawiszy w Javie?

Próbuję napisać grę i muszę obsługiwać wiele naciśnięć klawiszy naraz.

Kiedy trzymam klucz (powiedzmy, aby iść do przodu), a następnie przytrzymuję inny klawisz (na przykład, aby skręcić w lewo), nowy klucz zostanie wykryty, ale stary przycisk nie jest już wykrywany.

+1

Więcej szczegółów, proszę! Co próbujesz zrobić? –

+1

złe pytanie, potrzebujesz dużo więcej szczegółów: Dlaczego środowisko? Huśtawka? AWT? Co masz na myśli przez "uchwyt"? –

Odpowiedz

15

Jednym ze sposobów jest śledzenie, które klawisze są obecnie niedostępne.

Po otrzymaniu zdarzenia keyPressed dodaj nowy klucz do listy; kiedy pojawi się wydarzenie keyReleased, usuń klucz z listy.

Następnie w pętli gry można wykonywać akcje w oparciu o to, co znajduje się na liście kluczy.

+0

To nie wydaje się takie hackowe. (Oczywiście są pewne problemy związane z fokusowaniem - myślę, że zakładam wszystko na skupienie na zyskach/stracie.) –

+0

@MichaelMyers, jak rozumiesz klucz powtórzony, jeśli przytrzymam klucz, wygląda jak pryamid na boku: a | a, a | a, a, a | a, a, a, a | a, a, a | a, a | a – KisnardOnline

+0

@JayAvon: Myślę, że warto zadać nowe pytanie. –

2

Mówiąc ogólnie, to, co opisujesz, można uzyskać za pomocą bitmasks.

+3

-1 brak odpowiedzi związanej z java i brak pomocy w odpowiedzi na pytanie – Janusz

+0

Co masz na myśli Janusz? To więcej niż istotne. Tak, nie jest to związane z Javą, ale to nie znaczy, że jest pomocne. –

3

Oto przykładowy kod ilustrujący sposób, aby wykonać działanie, kiedy CTRL + Z jest wciśnięty:

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. */ 

} 
+0

Ale co, jeśli inne klucze muszą być klawiszami niezmodyfikowanymi? Powiedz, kierunkowe klawisze do przesuwania ikonki po ekranie i miejsca do strzelania? Chcesz móc strzelać podczas ruchu – TheRealChx101

Powiązane problemy