2009-04-15 3 views
15

Wie handhabe ich simultane Tastendrücke in Java?Wie handhabe ich gleichzeitige Tastenbetätigungen in Java?

Ich versuche, ein Spiel zu schreiben und muss mehrere Tasten gleichzeitig drücken.

Wenn ich einen Schlüssel halte (sagen wir, um vorwärts zu gehen) und dann eine andere Taste halte (zum Beispiel um nach links zu gehen), wird der neue Schlüssel erkannt, aber die alte gedrückte Taste wird nicht mehr erkannt.

+1

Weitere Details, bitte! Was versuchst du zu machen? –

+1

schlechte Frage, Sie brauchen viel mehr Details: Warum Umwelt? Swing? AWT? Was meinst du mit "behandeln"? –

Antwort

15

Ein Weg wäre, sich selbst zu verfolgen, welche Schlüssel gerade nicht aktiv sind.

Wenn Sie ein keyPressed-Ereignis erhalten, fügen Sie den neuen Schlüssel zur Liste hinzu; Wenn Sie ein keyReleased-Ereignis erhalten, entfernen Sie den Schlüssel aus der Liste.

Dann können Sie in Ihrer Spielschleife Aktionen ausführen, die auf der Liste der Schlüssel basieren.

+0

Das scheint nicht hackish. (Offensichtlich gibt es leichte Probleme im Zusammenhang mit dem Fokus - ich nehme an, alle bis zum Fokus/Fokus). –

+0

@MichaelMyers Wie wiederholst du Schlüssel, wenn ich einen Schlüssel halte, geht es wie ein Pryamid auf seiner Seite: a | a, a | a, a, a | a, a, a, a | a, a, a | a, a | a – KisnardOnline

+0

@JayAvon: Ich denke, das ist es wert, eine neue Frage zu stellen. –

2

Im Allgemeinen kann das, was Sie beschreiben, mit bitmasks erreicht werden.

+3

-1 keine Java-bezogene Antwort und keine Hilfe bei der Beantwortung der Frage – Janusz

+0

Was meinst du Janusz? Es ist mehr als relevant. Ja, es ist nicht Java bezogen, aber das bedeutet nicht, dass es hilfreich ist. –

3

Hier ist ein Codebeispiel veranschaulicht, wie eine Aktion auszuführen, wenn STRG + Z gedrückt wird:

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

Aber was, wenn andere Schlüssel nicht-Modifizierungsschlüssel sein müssen? Sagen Sie wie, Richtungstasten zum Bewegen eines Sprites über den Bildschirm und Platz zum Fotografieren? Sie möchten in der Lage sein zu schießen, während Sie sich bewegen – TheRealChx101