एक तरीका वर्तमान और पिछले इनपुट राज्यों को संग्रहीत करना है, और हर बार जब आप इनपुट को पोल करते हैं, तो उनकी तुलना करें।
प्रत्येक कुंजी के लिए जिसे दबाया जा सकता है, उस वस्तु को स्टोर करें जिसमें पिछली बार का टाइमस्टैम्प हो जो कुंजी को डाउन स्टेट से अप स्टेट में स्विच करता है।
हर चुनाव में ऐसा करके इन वस्तुओं को अपडेट करें:
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
।
प्रत्येक कॉम्बो के लिए एक कॉम्बो ऑब्जेक्ट है, और प्रत्येक पोल पर प्रत्येक कॉम्बो ऑब्जेक्ट पर कॉल अपडेट () करें।
एक कॉम्बो ऑब्जेक्ट का अपडेट () विधि कॉम्बो से मेल खाएगा, अगर इस पोल में कॉम्बो के लिए सभी आवश्यक शर्तें संतुष्ट हैं, तो यह जाँच करेगा। यानी कॉम्बो के लिए सभी कुंजी टाइमस्टैम्प क्रम में हैं, और कॉम्बो को तोड़ने वाली कोई अन्य कुंजी इस फ्रेम को दबाया नहीं गया है। मिले प्रत्येक शर्त के लिए, कॉम्बो ऑब्जेक्ट में एक काउंटर बढ़ाकर अगली स्थिति की जांच करें। जब एक कॉम्बो में सभी शर्तें पूरी होती हैं, तो उस विधि को कॉल करें जिसे कॉम्बो को निष्पादित करना चाहिए। यदि some_key_has_been_pressed == true
लेकिन वह कुंजी जो कॉम्बो के लिए अगली शर्त है उसे दबाया नहीं गया है, तो कॉम्बो की संतुष्ट स्थिति काउंटर को 0 पर रीसेट करें।
उपरोक्त मेरी पसंदीदा विधि है, क्योंकि इसे लागू करना आसान है, बनाए रखना आसान है, कुशल है, और अत्यधिक मॉड्यूलर है।
हालाँकि, एक और अच्छी विधि के लिए, XNA इनपुट अनुक्रम नमूना देखें , जो C # में लिखा गया है, और तर्क संभवतः आपके द्वारा उपयोग की जा रही भाषा के लिए हस्तांतरणीय है।