Una forma es almacenar los estados de entrada actuales y anteriores, y compararlos cada vez que sondea la entrada.
Para cada tecla que se puede presionar, almacene un objeto que tenga una marca de tiempo de la última vez que la tecla cambió de un estado inactivo a un estado activo.
Actualice estos objetos haciendo esto en cada encuesta:
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;
}
}
}
Ahora puedes hacer coincidir tus combos con el contenido de keys
.
Tenga un objeto combinado para cada combinación y llame a update () en cada objeto combinado en cada encuesta.
El método update () de un objeto combo coincidirá con el combo, verificando si se cumplen todas las condiciones necesarias para el combo en esta encuesta. Es decir, todas las marcas de tiempo de las teclas para el combo hasta ahora están en orden, y ninguna otra tecla que rompa el combo se ha presionado este marco. Para cada condición cumplida, incremente un contador en el objeto combinado a la siguiente condición para verificar. Cuando se cumplen todas las condiciones en un combo, llame al método que debe realizar el combo. Si some_key_has_been_pressed == true
no se ha presionado la tecla que es la siguiente condición para el combo, restablezca el contador de condición satisfecha del combo a 0.
Lo anterior es mi método preferido, ya que es simple de implementar, fácil de mantener, eficiente y altamente modular.
Sin embargo, para otro buen método, consulte la muestra de secuencia de entrada XNA , que está escrita en C #, y es probable que la lógica sea transferible al lenguaje que está utilizando.