KeyListener

MOEP_BIBER

Aktives Mitglied
Hey Leute,

ich hab ein Problem mit meinem KeyListener:

Mein Code sieht stark abgekürzt so aus:
Java:
boolean left;
boolean right;
boolean space;
public void keyPressed(KeyEvent e)
{
int kc = e.getKeyCode();
        switch(kc)
        {
            case 32: space = (space == true) ? false:true;
            break;
            case 39: right = (right == true) ? false:true;
            break;
            case 37: left = (left == true) ? false:true;
            break;
        }

In der Methode keyReleased ist genau das Selbe drin.
In nem Thread werden die Booleans ständig geprüft und je nach Status eine Aktion ausgeführt.

Nun zu meinem Problem:
An sich würde das Ganze funktionieren, das Problem liegt jedoch darin, dass wenn man lange auf zb der linken maustaste draufbleibt, dann wird sozusagen sehr rapide die linke maustaste gedrückt.
(Beispiel bei Word: man drückt die Taste "a" dann wird zuerst ein "a" reingeschrieben dann gibts ne kurze Pause und dann werden rapide viele weitere "a"s eingefügt.)

Was kann ich machen?

MfG Biber
 
Erstmal erklären, was ein KeyListener mit Maustasten zu tun hat. Ansonsten ist das beschriebene Verhalten normal, aber wenn man nur auf keyPressed/released reagiert (und nicht auf keyTyped) sollte man davon nichts merken.

EDIT: Was genau mit den Flags erreicht werden soll, könntest du auch nochmal beschreiben...
 
Ja das mit der Maus musste nochmal näher erläutern.

Zu deinen Flags:
Code:
space = (space == true) ? false:true;
=>
Code:
space = !space;
Wenn das selbe in deinem keyReleased steht dann is das wohl äquivalent mit
keypressed:
Java:
...
space = true;
...
keyreleased:
Java:
...
space = false;
...
Oder nicht?
Du machst ja nichts anderes als das flag umzudrehen bei tastendruck/taste loslassen.
 
Genau und das "verzögern" kommt durch die Windows Tastenverzögerung zustande ... hatte ich in meinem Spiel auch mal 😉 Öffne einfach mal ein Editor und drücke selbst AAAAAAA.
 
Herzlichen Dank EikeB.

Jetzt funktionierts.
Hab das viel zu kompliziert geschrieben, da ich den Code zuerst in ner anderen Methode hatte und da brauchte ich den Ausdruck.

noch ne kurze Frage:

Macht man das normalerweise so?
Also für jeden Key n boolean bzw ein booleanArray um den Status der Tasten zu speichern?
Oder wird das normalerweise anders gelöst?

offtopic: Kann man hier im Forum auch ein ganzes Programm posten damit sich den mal jemand ansieht(natürlich mit einigen Kommentaren zum leichteren Verständnis und nicht allzu groß), da ich denke mein Code ist allgemein viel zu kompliziert geschrieben.

MfG Biber
 
Was ist wenn ich zwei Tastaturen an meinem System habe? (ok, eine davon ist physikalisch keine Tastatur sondern ein über USB angeschlossener Barcodescanner, welcher sich aber als Tastatur anmeldet und auch so verhält)

Kann ich unterscheiden welcher Code woher kommt?
 

Zurück
Oben