मैं विभिन्न कीबोर्ड लेआउट कैसे संभाल सकता हूं?


10

मान लीजिए कि मेरे पास एक गेम है जो एक QWERTY लेआउट पर WASD नियंत्रण का उपयोग करता है। इन नियंत्रणों का उपयोग करने की कोशिश करते हुए, कहते हैं, एक Dvorak लेआउट आदर्श नहीं है ( <A:HQWERTY के बराबर )। जाहिर है, मैं उसी भौतिक कुंजी का उपयोग करना चाहता हूं जैसे QWERTY ( ,aoeDVORAK पर) का उपयोग करेगा ।

मैं कुछ संभावित समाधानों के साथ आया हूँ:

  • उपयोगकर्ता को QWERTY का उपयोग करने के लिए बाध्य करें
    • स्पष्ट रूप से आदर्श नहीं, विशेष रूप से अंतरराष्ट्रीय उपयोगकर्ताओं के लिए
  • कीबोर्ड लेआउट पर आधारित शॉर्टकट बदलें (WASD ->, aoe)
    • मुझे प्रत्येक समर्थित लेआउट (ऑटोमैटिबल) के लिए लेआउट मैप बनाने के लिए मजबूर करता है
    • यदि WASD से अधिक शॉर्टकट हैं तो उपयोगकर्ता के लिए सबसे आसान है
  • उपयोगकर्ता को स्वयं शॉर्टकट परिभाषित करने के लिए बाध्य करें
    • अधिक लचीला
    • अगर बहुत सारे शॉर्टकट हैं तो कष्टप्रद
    • दूसरे विकल्प के साथ संयोजन के रूप में इस्तेमाल किया जा सकता है
  • हार्डवेयर कीकोड का उपयोग करें
    • कीबोर्ड पर लगातार?

इस प्रकार की चीज़ को आमतौर पर कैसे नियंत्रित किया जाता है?

जवाबों:


9

स्कैन कोड के लिए सुनो। यह कैसे किया जाता है यह आपके ओएस पर निर्भर करता है, जिसे आपने सूचीबद्ध नहीं किया था। विंडोज पर, आप WMVKKDOWN और दोस्तों से MapVirtoKey का उपयोग करके दिए गए वर्चुअल कुंजी कोड के लिए स्कैकोड प्राप्त कर सकते हैं । स्कैन कोड भौतिक कुंजी पर आधारित हैं और लेआउट द्वारा अप्रभावित हैं।

Http://www.altdevblogaday.com/2011/10/02/i-never-managed-to-go-left-on-first-try/ का त्वरित पाठ करें

तो, जैसा कि निकोल बोलस ने कहा, आपको उपयोगकर्ताओं को इसके आसपास काम करने देना चाहिए। लेकिन सिर्फ इसे सही तरीके से काम करना कठिन नहीं है और आपके उपयोगकर्ता इसे सराहेंगे।

ध्यान दें कि आप खेल डेवलपर्स के विशाल बहुमत की तरह, चरित्र इनपुट को गलत तरीके से संभाल रहे हैं। सुनिश्चित करें कि पाठ के लिए, आप हमेशा टेक्स्ट इनपुट के लिए WM_KEYDOWN का उपयोग करने के बजाय WM_CHAR (या अन्य OSes के बराबर) का उपयोग करते हैं। यह मान लेना पूरी तरह से गलत है कि जब कुछ लेआउट पर डेड की के उपयोग के कारण 'ए' कुंजी को दबाया जाता है, तो आपको टेक्स्ट इनपुट नियंत्रण के लिए 'ए' इनपुट करना चाहिए। आप पूर्वी एशियाई बाजारों के लिए IME (या OS समतुल्य) का भी समर्थन कर सकते हैं, जिसमें कीबोर्ड की तुलना में कहीं अधिक वर्ण हो सकते हैं, और टाइप करने के लिए विशेष UI की आवश्यकता होती है। एक खेल में आईएमई को संभालना एक दर्द है (इसे बिल्कुल संभालना एक दर्द है), लेकिन मेरे विचार से इसके लायक है कि आप अपने उत्पाद की अपील को बहुत अधिक, बहुत बड़े बाजारों में सेट करें। फिर, WM_KEYDOWN का उपयोग कभी भी पाठ के लिए नहीं किया जाता है।


अच्छी सलाह। मैंने ओएस को सूचीबद्ध नहीं किया क्योंकि मैं सामान्य दिशानिर्देशों / अपेक्षाओं की तलाश कर रहा था (मैं कार्यान्वयन विवरणों को संभाल सकता हूं)।
बीटगैमिट

6

तुम्हे करना चाहिए हमेशा खिलाड़ी को अपने प्रमुख असाइनमेंट को बदलने की क्षमता देनी । यह है कि यह "आम तौर पर नियंत्रित किया जाता है": खिलाड़ी को उन्हें बदलने दें। कुछ खिलाड़ी अपने कीबोर्ड को QWERTY पर सेट करेंगे जब वे गेम खेलेंगे क्योंकि यही सबसे अधिक गेम्स की उम्मीद है। कुछ उन्हें अपने वर्तमान कीबोर्ड पर सेट कर देंगे और चाबियाँ बदलने की क्षमता पर भरोसा करेंगे।


1
जब भाषा बदली जाती है तो क्या होगा? उदाहरण के लिए, क्या फ्रेंच WASD -> ZQSD को बदलने की उम्मीद करते हैं अगर वे अपने AZERTY लेआउट को रखना चाहते हैं, भले ही गेम फ्रेंच में हो?
बीटगैमिट

1
@tjameson: क्या आपने मेरा उत्तर पढ़ा है? उन्हें अपने मुख्य कार्य को फिर से परिभाषित करने दें । तब कोई समस्या नहीं होगी।
निकोल बोलस

1
हाँ, मैं था अपने जवाब पढ़ा है, और मैं शायद आपकी सलाह के साथ जायेंगे। मैं सिर्फ यह सुनिश्चित करना चाहता था कि विभिन्न स्थानों में उपयोगकर्ताओं को शिपिंग करते समय कोई उम्मीद न हो।
बीटगैमिट

3

मामले में आप स्कैन कोड के लिए नहीं सुन सकते हैं (उदाहरण के लिए जब फ्लैश गेम विकसित करते हैं) तो आप एक महत्वपूर्ण बंधन बना सकते हैं जो यथासंभव कई लेआउट के लिए काम करता है। अधिकांश कीबोर्ड लेआउट बहुत समान हैं, बस कुछ अपवादों के साथ।

ISO 9995 के बाद कीबोर्ड लेआउट इस प्रकार व्यवस्थित किए गए हैं:

आईएसओ के बाद कीबोर्ड लेआउट

मूल रूप से काली चाबियां उपयोग करने के लिए सुरक्षित हैं।


की-बोर्ड लेआउट के बारे में अधिक जानकारी के लिए, QWERTY , QWERTZ , AZERTY और QZERTY देखें
चक वॉलबोरन

3

अधिकांश बड़े बजट के खेल (एक अंतरराष्ट्रीय वितरक वाले) बॉक्स से बाहर काम करेंगे, azero लेआउट के लिए WASD के बजाय ZQSD का उपयोग करेंगे। एक सभ्य खेल पहले स्तर में लेआउट को भी पेश करेगा, दूसरों को खिलाड़ी को अनुकूलन स्क्रीन के माध्यम से खोजने देगा। कार्यान्वयन की रणनीति का पता ओएस को स्विचआउट करने के लिए कहकर लगाया जा सकता है। या तो खेल आंतरिक रूप से स्केनोड्स (पदों) का उपयोग करता है, और कॉन्फ़िगरेशन संवाद और संकेत दिखाते समय उन्हें कीकोड (प्रतीकों) के लिए मैप करता है; या यह आंतरिक रूप से कीकोड का उपयोग करता है, और स्टार्टअप या पहले लॉन्च पर लेआउट का पता लगाता है।

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

एक गेम को पोर्ट करते समय जिसने कभी भी स्केनोड्स का उपयोग नहीं किया (जो कि एक सभ्य इंजन के साथ ऐसा नहीं है, क्योंकि स्कैन्कोड भी हार्डवेयर और तेज़ के करीब हैं), अन्य रणनीति अधिक व्यावहारिक हो सकती है। आप SDL2 फ़ंक्शन SDL_GetKeyFromScancode और SDL_GetScancodeFromKey , या प्लेटफ़ॉर्म-विशिष्ट समकक्षों का उपयोग करके कीकोड में मैप कर सकते हैं । यदि आप SDL2 ईवेंट लूप का भी उपयोग करते हैं, तो वे फ़ंक्शन लेआउट स्विच में सटीक रहेंगे। विंडोज पर GetKeyboardLayout () जैसे कार्यों से बचें; इस बात की कोई गारंटी नहीं है कि आप किसी ज्ञात सूची में लेआउट खोजने में सक्षम होंगे।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.