วิธีหนึ่งคือการจัดเก็บสถานะอินพุตปัจจุบันและก่อนหน้าและเปรียบเทียบทุกครั้งที่คุณสำรวจความคิดเห็นอินพุต
สำหรับแต่ละคีย์ที่สามารถกดได้ให้จัดเก็บวัตถุที่มีการประทับเวลาครั้งล่าสุดที่คีย์เปลี่ยนจากสถานะลงเป็นสถานะขึ้น
อัปเดตวัตถุเหล่านี้โดยทำสิ่งนี้ในทุกโพล:
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 # และตรรกะนั้นมีแนวโน้มที่จะถ่ายโอนไปยังภาษาที่คุณกำลังใช้