Один із способів - це збереження поточного та попереднього станів введення та порівняння їх кожного разу, коли ви запитуєте вхід.
Для кожної клавіші, яку можна натиснути, зберігайте об’єкт, який має часову позначку останнього разу, коли ключ перейшов із стану вниз у стан вгору.
Оновіть ці об’єкти, роблячи це під час кожного опитування:
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;
}
}
}
Тепер ви можете відповідати комбінаціям вмісту keys
.
Майте об’єкт комбо для кожного комбо, а при кожному опитуванні виклик update () для кожного об'єднаного об'єкта.
Метод оновлення () об'єкта комбо буде узгоджуватися з комбо, перевіряючи, чи всі необхідні умови комбо виконані під час цього опитування. Тобто всі часові позначки клавіш для комбо поки що в порядку, і жодна інша клавіша, яка б порушила комбо, не була натиснута на цей кадр. Для кожної виконаної умови збільшуйте лічильник у об'єкті комбо до наступної умови для перевірки. Коли всі умови дотримані в комбо, викличте метод, який комбо повинен виконати. Якщо some_key_has_been_pressed == true
клавіша, що є наступною умовою для комбо, не була натиснута, то відновіть лічильник задоволених умов комбо до 0.
Зазначене вище є моїм кращим методом, оскільки це простий у здійсненні, простий у обслуговуванні, ефективний та високомодульний.
Однак для іншого хорошого методу ознайомтеся з зразком вхідної послідовності XNA , який записаний на C #, і логіка, ймовірно, переноситься на мову, яку ви використовуєте.