Counter durch gepresste Taste nur auf 1 erhöhen und nicht durchzählen lassen

HelpCode

Neues Mitglied
Also Leute ich hab ein Problem, und zwar ist das so ich eine super simple Bedingung habe:

wenn ich einmal Q drücke, soll auf 1 erhöht werden.
Aber es ist so, dass wenn ich nur einmal Q drücke, er direkt bis 7 durchzählt und die Bedingung direkt erfüllt ist.
Ich möchte aber, dass man 7 mal auf Q klicken muss damit sich die Bedingung erfüllt. Was kann ich tun? (Hab auch mit den Geschweiften Klammern rumgespielt aber
das funktioniert trotzdem nicht)

if (keyCode=='Q')
{
QCounter++;
}

if (QCounter==7){
enemys.remove(i);

println("gegner finished");
println(QCounter);
keyFight=false;
}
}
}


Es ist echt frustrierend, weil so schwer ist das bestimmt nicht :/
 
Ohne den Rest deines Programms ist es jetzt nur raten, aber wahrscheinlich pruefst du nicht ob die Taste gedrueckt wurde, sondern du pruefst ob die taste gedrueckt ist. Das hoert sich im ersten Moment komisch an, ist aber ein wichtiger Unterschied. Wenn du zum Beispiel in jedem Frame etwas machen willst:

Java:
public void doThingsOnEveryDrawnFrame() {
    wantedAction();
}

Dann passiert das bei jedem Frame der gezeichnet wird. Wenn du dann pruefst ob die Taste gedrueckt ist:

Java:
public void doThingsOnEveryDrawnFrame() {
    if (getState("Q") == DOWN) {
        wantedAction();
    }
}

Dann passiert dies natuerlich so oft wie Frames gezeichnet werden solange die Taste gedrueckt ist. Waehrend dein Finger auf der Taste ruht werden ja in der Zwischenzeit irgendwas so um 15 Frames gezeichnet, wahrscheinlich. Du musst also pruefen ob die taste gedrueckt wurde:

Java:
public void doThingsOnEveryDrawnFrame() {
    if (getState("Q") == DOWN) {
        if (!qIsPressed) {
            wantedAction();
            
            qIsPressed = true;
        }
    } else {
        // Q must be up right now.
        qIsPressed = false
    }
}

Also im Groszen und Ganzen musst du beim ersten mal deine Aktion machen, und jede weitere Aktiojn unterdruecken solange die Taste nicht erneut gedrueckt wurde.

Alternativ kann es natuerlich auch sein dass du einen Listener fuer ein Ereignis eingehaengt hast der nicht fuer das erste mal hinunterdruecken ausloest, sondern solange die Taste hinuntergedrueckt wird.
 
Du willst ein Flip Flop programmieren.

Einmal inkrementieren wenn die Taste gedrückt wurde, ein erneutes Inkrementieren aber erst wieder zulassen wenn die Taste einmal losgelassen wurde.

Ohne deinen Code jetzt genauer zu untersuchen, du müßtest Events nach nicht nur nach KEY, sondern auch z.B. nach KEY_DOWN und KEY_UP oder ähnlichem filtern können.
 
Die Frage ist, was der TE verwendet un ob es die genannten Methoden da so gibt.

Da eben keyCode direkt eine Variable ist und nicht eine Instanzvariable eines Parameters kann es sehr gut sein, dass Deine Antwort in dem Kontext des TE nicht geht.
 
Danach zu schauen ist ja auch richtig. Wenn er den typischen Key Listener von Java direkt nutzen kann, dann ist der Hinweis von Tobias auch korrekt. Nur eben fürchte ich, dass hier irgend ein Framework im Spiel ist das irgend ein Lehrer im Unterricht verwendet, dass eben nur einen stark vereinfachten Zugriff erlaubt.

Dann wäre der Hinweis von Robert eben nicht falsch. Tobias scheint das ja auch etwas erkannt zu haben, denn er fragt ja auch nach dem Kontext. Aber diese Aussage von Robert ist ja ebenso wie Dein Hinweis zu einem FlipFlop.
 
Also, es haben alle ein biszchen Recht. 🙂 Wer am rechtesten hat (nicht "ist", wichtiger Unterschied) haengt davon ab was am letzten Ende als Technologie verwendet wird. Aber ich glaube, da haben wir jetzt ohnehin alle Moeglichkeiten soweit abgedeckt.
 

Zurück
Oben