Un modo è memorizzare gli stati di input attuali e precedenti e confrontarli ogni volta che si esegue il polling dell'input.
Per ogni tasto che può essere premuto, memorizza un oggetto che ha un timestamp dell'ultima volta in cui il tasto è passato da uno stato inattivo a uno in alto.
Aggiorna questi oggetti facendo questo ad ogni sondaggio:
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;
}
}
}
Ora puoi abbinare le tue combo con il contenuto di keys
.
Disponi un oggetto combo per ogni combo e chiama update () su ciascun oggetto combo in ogni sondaggio.
Il metodo update () di un oggetto combo corrisponderà al combo, verificando che in questo sondaggio siano soddisfatte tutte le condizioni necessarie per il combo. Vale a dire che tutti i timestamp dei tasti per la combo finora sono in ordine, e nessun altro tasto che spezzerebbe la combo è stato premuto in questo frame. Per ogni condizione soddisfatta, incrementare un contatore nell'oggetto combo alla condizione successiva da verificare. Quando tutte le condizioni sono soddisfatte in una combo, chiamare il metodo che la combo dovrebbe eseguire. Se some_key_has_been_pressed == true
ma il tasto che è la condizione successiva per la combo non è stato premuto, reimposta il contatore delle condizioni soddisfatte della combo su 0.
Quanto sopra è il mio metodo preferito, in quanto è semplice da implementare, facile da mantenere, efficiente e altamente modulare.
Tuttavia, per un altro buon metodo, controlla l' esempio della sequenza di input XNA , che è scritto in C #, e la logica è probabilmente trasferibile nella lingua che stai usando.