Une façon consiste à stocker les états d'entrée actuels et précédents et à les comparer chaque fois que vous interrogez l'entrée.
Pour chaque touche qui peut être enfoncée, stockez un objet qui a un horodatage de la dernière fois que la touche est passée d'un état bas à un état haut.
Mettez à jour ces objets en procédant ainsi à chaque sondage:
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;
}
}
}
Vous pouvez maintenant faire correspondre vos combinaisons avec le contenu de keys
.
Ayez un objet combo pour chaque combo et appelez update () sur chaque objet combo à chaque sondage.
La méthode update () d'un objet combo correspondra au modèle du combo, vérifiant si toutes les conditions nécessaires pour le combo sont remplies lors de ce sondage. C'est-à-dire que tous les horodatages des touches pour le combo jusqu'à présent sont en ordre, et aucune autre touche qui briserait le combo n'a été appuyée sur cette image. Pour chaque condition remplie, incrémentez un compteur dans l'objet combo à la condition suivante à vérifier. Lorsque toutes les conditions sont remplies dans un combo, appelez la méthode que le combo doit effectuer. Si some_key_has_been_pressed == true
la touche qui est la condition suivante pour le combo n'a pas été enfoncée, réinitialisez le compteur de conditions satisfaites du combo à 0.
Ce qui précède est ma méthode préférée, car elle est simple à mettre en œuvre, facile à entretenir, efficace et hautement modulaire.
Cependant, pour une autre bonne méthode, consultez l' exemple de séquence d'entrée XNA , qui est écrit en C #, et la logique est probablement transférable dans le langage que vous utilisez.