Doppel KeyListener

Status
Nicht offen für weitere Antworten.

Titanpharao

Bekanntes Mitglied
Hey,

ich habe vor ein Spiel zu entwickeln, wo zwei Spieler gleichzeitig spielen können. Zufolge brauchen sie auch "zwei Keylistener". Wie kann ich sowas realisieren? Denn wenn einer eine Taste gedrückt hält, kann der andere nicht mehr die tasten bedienen. Gibt es da etwas spezielles, oder muss ich mir selber etwas herleiten? Oder hat jemand einen guten Ansatz oder sowas schonmal gemacht?

Danke für Hilfe
 

pyr0t0n

Aktives Mitglied
Hallo,

also im Grunde brauchst du keine 2 Keylistener ich habs eben Fix so gelöst

Code:
public class Main extends Frame implements Runnable, KeyListener {
    
    Boolean spieler1o=false;
    Boolean spieler1l=false;
    Boolean spieler1r=false;
    Boolean spieler1u=false;
    Boolean spieler2o=false;
    Boolean spieler2l=false;
    Boolean spieler2r=false;
    Boolean spieler2u=false;
    
    int x1=60, x2=20, y1=50,y2=100;
    
    public Main()
    {
        setSize(640,480);
        setVisible(true);
        addKeyListener(this);
    }
    
    @Override
    public void paint(Graphics g)
    {
        g.fillOval(x1, y1, 10, 10);
        g.fillOval(x2, y2, 10, 10);
        
    }

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here
        Main h = new Main();
    }

    public void keyTyped(KeyEvent e) {
    }

    public void keyPressed(KeyEvent e) {
        if(e.getKeyCode()== e.VK_UP)
        {
            spieler1o=true;
        }
        if(e.getKeyCode()== e.VK_DOWN)
        {
            spieler1u = true;
        }
        if(e.getKeyCode()== e.VK_RIGHT)
        {
            spieler1r=true;
        }
        if(e.getKeyCode()== e.VK_LEFT)
        {
            spieler1l = true;
        }
        if(e.getKeyCode()== e.VK_W)
        {
            spieler2o=true;
        }
        if(e.getKeyCode()== e.VK_S)
        {
            spieler2u = true;
        }
        if(e.getKeyCode()== e.VK_D)
        {
            spieler2r=true;
        }
        if(e.getKeyCode()== e.VK_A)
        {
            spieler2l = true;
        }
        
        
    }

    public void keyReleased(KeyEvent e) {
        if(e.getKeyCode()== e.VK_UP)
        {
            spieler1o=false;
        }
        if(e.getKeyCode()== e.VK_DOWN)
        {
            spieler1u = false;
        }
        if(e.getKeyCode()== e.VK_RIGHT)
        {
            spieler1r=false;
        }
        if(e.getKeyCode()== e.VK_LEFT)
        {
            spieler1l = false;
        }
        if(e.getKeyCode()== e.VK_W)
        {
            spieler2o=false;
        }
        if(e.getKeyCode()== e.VK_S)
        {
            spieler2u = false;
        }
        if(e.getKeyCode()== e.VK_D)
        {
            spieler2r=false;
        }
        if(e.getKeyCode()== e.VK_A)
        {
            spieler2l = false;
        }
    }

    public void run() {
        Thread.currentThread().setPriority(Thread.MIN_PRIORITY);
        while(true)
        {
            try {
                if (spieler1o) { y1--; }
                if (spieler1u) { y1++; }
                if (spieler1l) { x1--; }
                if (spieler1r) { x1++; }
                if (spieler2o) { y2--; }
                if (spieler2u) { y2++; }
                if (spieler2l) { x2--; }
                if (spieler2r) { x2++; }
                repaint();
                Thread.sleep(10);
            } catch (InterruptedException ex) {
                Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    }
}

Du überprüfst einfach welche Tasten gedrückt worden sind und setzt Diverse Variablen auf True und reagierst dementsprechend. Ich konnte somit beide Kreise gleichzeitig mit Pfeiltasten und WASD bewegen.
 

Maeher

Bekanntes Mitglied
Titanpharao hat gesagt.:
Denn wenn einer eine Taste gedrückt hält, kann der andere nicht mehr die tasten bedienen.
Wenn ich dein Vorhaben richtig verstehe, weiß ich nicht wo dein Problem ist. Man kann doch normalerweiße Problemlos mehrere Tasten gleichzeitig bedienen, und sollte das auch entsprechend mit einem KeyListener auslesen können?
 

Quaxli

Top Contributor
Aber probier mal 6 Tasten gleichzeitig! Als z. B. beide Spieler in diagonaler Bewegung und dabei noch eine Feuertaste. Ich hatte ein ähnliches Konstrukt wie pyr0t0n im Sinn. Aber mein Testprogramm ist dabei nach der 4. Taste ausgestiegen.
 

Maeher

Bekanntes Mitglied
Ich glaube, dass das nicht an Java liegt. Zum Teil sind die Tastaturen schon Hardwaremäßig nicht mehr in der Lage das zu übertragen. Versuch 's mal in irgendwelchen anderen Programmen (z.B. im Texteditor), du erhälst ab einer bestimmten Menge an gedrückter Tasten nie vernünftige Ergebnisse.
 

pyr0t0n

Aktives Mitglied
Aber gegen mein Konstrukt kannste erstmal nix sagen... und btw bei mir laufen beide Diagonal also mit 4 Tasten scheint also wirklich hardwaremäßig beschränkt zu sein.

EDIT: Habs grade nochmal probiert, selbst wenn ich bei Spieler ein die Tasten HOCH, LINKS und RECHTS drücke (ich weis er läuft dann nur gerade aus hoch) kann ich trotzdem mit dem WASD "Spieler" Diagonal "laufen".
 

Quaxli

Top Contributor
Ich sach' ja gar nix. Ich hatte ja auch sowas gebaut. Und wie wir gemerkt hatten, liegt's an der Hardware. Hast halt ein gutes Keyboard. Glücksschlumpf ;)
 

pyr0t0n

Aktives Mitglied
Laptop 4TW ^^ aber mal im ernst ne andere methode ist ja auch nicht möglich oder kann ich 2 Keylistener Parallel betreiben denke du kennst dich da bissle mehr aus als ich, bin ja noch anfänger.
 

Maeher

Bekanntes Mitglied
Naja, grundsätzlich kannst du einem Oberflächenelement schon mehrere KeyListener hinzufügen.
Nur frage ich mich, ob dir das überhaupt hilft die Eingaben für die verschiedenen Benutzer außeinanderzuhalten, denn die bekommen ja schließlich beide erst einmal die gleichen Events.
 

pyr0t0n

Aktives Mitglied
richtig theoretisch müsstest du dem einen Keylistener dann sagen er darf nur auf WASD was machen und dem anderen auf Oben Unten Links Rechts. Was im endeffekt auch nicht sinnig wäre, weil es ja auch wie oben stehen mit einem KeyListener und andersrum ja eh Hardwareabhängig ist obs funktioniert :D

Interessant wäre ja wenn der TE sich mal melden würde und sagen würde obs ihm nun geholfen hat und obs funktioniert ^^
 
G

Guest

Gast
Nein ich rede von deinem Code. Wenn ich da auf WASD bzw Pfeiltasten herrumdrücke passiert bei mir nichts. Sollte doch ein lauffähiges Programm sein oder?
 
T

tuxedo

Gast
Nach Zeile 34 fehlt ein

Code:
new Thread(h).start();

Dann läufts.
 

Titanpharao

Bekanntes Mitglied
ok jetzt gehts :)

werde ich mir mal anschauen, wenn ichs benötige...wobei bei mir ab der 5ten taste "PIEP" ...denke aber Hardware.
 
T

tuxedo

Gast
Bei mir macht sich der Rechner auch bemerkbar wenn ich mehr als 4 Tasten drücke... Scheint weitgehend "normal" zu sein dass bei 4 Tasten schluss ist.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
B KeyListener Bug Spiele- und Multimedia-Programmierung 2
M KeyListener funktioniert nicht während Timer läuft Spiele- und Multimedia-Programmierung 26
B Den KeyListener in einer JavaFXML Application benutzen Spiele- und Multimedia-Programmierung 2
A TileMap KeyListener - Problem Spiele- und Multimedia-Programmierung 2
R Probleme mit JPanel!KeyListener geht nicht Spiele- und Multimedia-Programmierung 6
M KeyListener Spiele- und Multimedia-Programmierung 8
T Problem mit JnR-Steuerung / KeyListener Spiele- und Multimedia-Programmierung 6
A KeyListener - Thread Problem Spiele- und Multimedia-Programmierung 2
F Problem mit KeyListener in Applet Spiele- und Multimedia-Programmierung 4
StrikeTom KeyListener Funktioniert nicht Spiele- und Multimedia-Programmierung 3
D Space Invaders(KeyListener Problem) Spiele- und Multimedia-Programmierung 3
S Ping Pong: KeyListener in Paint und while Spiele- und Multimedia-Programmierung 10
Developer_X Java "Multi"KeyListener Spiele- und Multimedia-Programmierung 15
C Anfängerfrage: Plazierung Panel im JFrame und KeyLIstener Spiele- und Multimedia-Programmierung 4
A Mit KeyListener zwei Tasten gleichzeitig abfragen Spiele- und Multimedia-Programmierung 2
S Probleme mit dem Licht und dem KeyListener Spiele- und Multimedia-Programmierung 2
K Jump n Run Keylistener und Schleifen Spiele- und Multimedia-Programmierung 8
M Jpanel mit Keylistener Spiele- und Multimedia-Programmierung 6
D Pfeiltasten beim KeyListener Spiele- und Multimedia-Programmierung 1
R KeyListener hält nicht mit Spiele- und Multimedia-Programmierung 14

Ähnliche Java Themen


Oben