Một cách là lưu trữ các trạng thái đầu vào hiện tại và trước đó và so sánh chúng mỗi khi bạn thăm dò ý kiến đầu vào.
Đối với mỗi phím có thể được nhấn, lưu trữ một đối tượng có dấu thời gian của lần cuối cùng mà khóa chuyển từ trạng thái xuống sang trạng thái lên.
Cập nhật các đối tượng này bằng cách thực hiện điều này tại mỗi cuộc thăm dò:
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;
}
}
}
Bây giờ bạn có thể mô hình phù hợp với combo của bạn so với nội dung của keys
.
Có một đối tượng kết hợp cho mỗi kết hợp và gọi cập nhật () trên từng đối tượng kết hợp tại mỗi cuộc thăm dò.
Phương thức update () của một đối tượng kết hợp sẽ tạo mẫu khớp với kết hợp, kiểm tra xem tất cả các điều kiện cần thiết cho kết hợp có được thỏa mãn tại cuộc thăm dò này không. Tức là tất cả các dấu thời gian của các phím cho đến nay đều được sắp xếp theo thứ tự và không có phím nào khác có thể phá vỡ kết hợp đã được nhấn vào khung này. Đối với mỗi điều kiện được đáp ứng, tăng một bộ đếm trong đối tượng kết hợp sang điều kiện tiếp theo để kiểm tra. Khi tất cả các điều kiện được đáp ứng trong một kết hợp, hãy gọi phương thức mà kết hợp sẽ thực hiện. Nếu some_key_has_been_pressed == true
nhưng phím đó là điều kiện tiếp theo cho combo chưa được nhấn, thì hãy đặt lại bộ đếm điều kiện thỏa mãn của combo thành 0.
Trên đây là phương pháp ưa thích của tôi, vì nó đơn giản để thực hiện, dễ bảo trì, hiệu quả và có tính mô đun cao.
Tuy nhiên, đối với một phương pháp tốt khác, hãy xem mẫu trình tự đầu vào XNA , được viết bằng C # và logic có thể chuyển sang ngôn ngữ bạn đang sử dụng.