Eine Möglichkeit besteht darin, den aktuellen und den vorherigen Eingabezustand zu speichern und jedes Mal zu vergleichen, wenn Sie die Eingabe abfragen.
Speichern Sie für jede Taste, die gedrückt werden kann, ein Objekt mit einem Zeitstempel des letzten Umschaltens der Taste von einem Abwärtszustand in einen Aufwärtszustand.
Aktualisieren Sie diese Objekte, indem Sie dies bei jeder Umfrage tun:
void update(){
some_key_has_been_pressed = false;
foreach(key in keys){
if(previous_input[key].Down && current_input[key].Up){
keys[key].up_timestamp = current_time();
}
if(current_input[key].Down){
keys[key].down_timestamp = current_time();
some_key_has_been_pressed = true;
}
}
}
Jetzt können Sie Ihre Combos mit dem Inhalt von vergleichen keys
.
Haben Sie ein Kombinationsobjekt für jede Kombination und rufen Sie bei jeder Abfrage update () für jedes Kombinationsobjekt auf.
Die update () -Methode eines Kombinationsobjekts stimmt mit der Kombination überein und prüft, ob bei dieser Abfrage alle erforderlichen Bedingungen für die Kombination erfüllt sind. Dh alle Tasten-Zeitstempel für die Combo sind bisher in Ordnung, und keine andere Taste, die die Combo brechen würde, wurde in diesem Frame gedrückt. Erhöhen Sie für jede erfüllte Bedingung einen Zähler im Kombinationsobjekt auf die nächste zu überprüfende Bedingung. Wenn alle Bedingungen in einer Kombination erfüllt sind, rufen Sie die Methode auf, die die Kombination ausführen soll. Wenn some_key_has_been_pressed == true
aber die Taste, die die nächste Bedingung für die Kombination ist, nicht gedrückt wurde, setzen Sie den Zähler für die erfüllte Bedingung der Kombination auf 0 zurück.
Das Obige ist meine bevorzugte Methode, da es einfach zu implementieren, leicht zu warten, effizient und hochmodular ist.
Schauen Sie sich für eine andere gute Methode das Beispiel der XNA-Eingabesequenz an , das in C # geschrieben ist, und die Logik ist wahrscheinlich auf die von Ihnen verwendete Sprache übertragbar.