2012-11-29 14 views
5

में कीडाउन() के साथ सरल लेकिन मुश्किल समस्या मैं sprites के साथ एक छोटा सा खेल कर रहा हूं जहां चरित्र दबाए गए कुंजी (तीर) के आधार पर चलता है। मैंने देखा है कि .KeyDown() विधि तक किसी भी कुंजी को जारी होने तक कॉल किया जा रहा है।सी #

उदा। जब उपयोगकर्ता ऊपर तीर दबा रहा है, तो .KeyDown() की विधि को कॉल किया जा रहा है। यदि नीचे तीर दबाया जाता है, तब भी ऊपर तीर दबाया जाता है, KeyEventArgs अब नीचे तीर से इनपुट प्राप्त करता है। अंत में, जब ऊपर तीर जारी किया जाता है, तो .KeyDown() ईवेंट कहलाता है, भले ही नीचे तीर अभी भी दबाया गया हो।

मैं इनपुट को "रीसेट" कैसे करूं और संकलक को .KeyDown() पर कॉल करने के लिए कहूं?

+0

क्या आपने लॉगिंग करने का प्रयास किया है कि कुंजीडाउन के लिए कौन सी कुंजी ज़िम्मेदार है ताकि आप यह जांच सकें कि आपको एक प्रमुख रिलीज कब मिलता है? इस तरह, आप आगे बढ़ सकते हैं जैसे कि कुंजी अभी भी नीचे है जब तक कि आप जिस कुंजी में रूचि रखते हैं वह वह है जिसने रिलीज की शुरुआत की थी। – RonaldBarzell

+0

यदि आपका गेम लॉजिक रीयल-टाइम इवेंट लूप में है, तो आप इसे कॉल कर सकते हैं: 'Form_KeyDown (null, e) ' –

उत्तर

3

एक बहुत अच्छा सवाल- मुझे विश्वास नहीं है कि इस डिफ़ॉल्ट व्यवहार को ओवरराइड करने का कोई तरीका है, लेकिन निश्चित रूप से महत्वपूर्ण प्रेस का ट्रैक रखकर इस प्रभाव से बचना संभव होगा- यानी, जब .KeyDown() कहा जाता है, तो जोड़ें कुछ प्रकार की संरचना की कुंजी जो इसका ट्रैक रखती है- और फिर, जब .KeyUp() कहा जाता है, तो उस संरचना से कुंजी हटा दें।

फिर, बस बार-बार उस संरचना को वर्तमान में दबाया चाबी के लिए चेक करें, और कि के बंद अपने आंदोलन का आधार, नहीं क्या .KeyDown() आपको बता रहा है।

+0

कीडाउन और कीप्स का ट्रैक रखना एकमात्र तरीका है जिसे मैंने इसे संभालने के लिए पाया है। मेरे पास 255 इंच के साथ एक सरणी है, प्रत्येक तत्व एक कुंजीकोड से संबंधित है। प्रत्येक बार लूप के माध्यम से मैंने उन्हें 0 (दबाया नहीं), 1 (नया दबाया), या 2 (अभी भी दबाया) सेट किया। मैंने ऐसा इसलिए किया क्योंकि कुछ कार्यक्षमता आप लगातार चाहते हैं (जैसे कर्सर कुंजियों को स्थानांतरित करने के लिए) और कुछ आप केवल प्रारंभिक कीप्रेस (जैसे एच 'टॉगल करने के लिए' एम ') की परवाह करेंगे। – kbelder

0

कुंजी जारी होने पर पता लगाने के लिए आप KeyUp का उपयोग करने का प्रयास कर सकते हैं। फिर आप मान सकते हैं कि KeyUp को तब तक दबाया जाता है जब तक कि कुंजी दबाया नहीं जाता है।