Chromebook में, उपयोगकर्ताओं को इनपुट के कई विकल्प मिलते हैं: कीबोर्ड, माउस, ट्रैकपैड, टचस्क्रीन, स्टाइलस, एमआईडीआई, और गेमपैड/ब्लूटूथ कंट्रोलर. इसका मतलब है कि एक ही डिवाइस को डीजे स्टेशन, कलाकार के कैनवस या गेमर के पसंदीदा प्लैटफ़ॉर्म के तौर पर इस्तेमाल किया जा सकता है. इस प्लैटफ़ॉर्म पर, AAA स्ट्रीमिंग गेम खेले जा सकते हैं.
डेवलपर के तौर पर, आपको अपने उपयोगकर्ताओं के लिए अलग-अलग तरह के और दिलचस्प ऐप्लिकेशन अनुभव बनाने का मौका मिलता है. इसके लिए, वे इनपुट डिवाइसों का इस्तेमाल कर सकते हैं. जैसे, अटैच किया गया कीबोर्ड, स्टाइलस, और Stadia गेम कंट्रोलर. हालांकि, इन सभी संभावनाओं के लिए आपको अपने यूज़र इंटरफ़ेस (यूआई) के बारे में भी सोचना होगा, ताकि आपके ऐप्लिकेशन का अनुभव आसान और तार्किक हो. खास तौर पर, ऐसा तब होता है, जब आपके ऐप्लिकेशन या गेम को मोबाइल फ़ोन के लिए डिज़ाइन किया गया हो. उदाहरण के लिए, अगर आपके गेम में फ़ोन के लिए ऑनस्क्रीन टच कंट्रोल वाला जॉयस्टिक है, तो हो सकता है कि आप इसे तब छिपाना चाहें, जब कोई व्यक्ति कीबोर्ड से गेम खेल रहा हो.
इस पेज पर, आपको इनपुट के कई सोर्स और उनसे जुड़ी मुख्य समस्याओं के बारे में जानकारी मिलेगी. साथ ही, इन समस्याओं को हल करने की रणनीतियों के बारे में भी बताया जाएगा.
उपयोगकर्ता के लिए, इनपुट के तरीकों की जानकारी
आदर्श रूप से, आपका ऐप्लिकेशन उपयोगकर्ता के चुने गए हर इनपुट का जवाब देगा. आम तौर पर, यह आसान होता है और इसके लिए आपको उपयोगकर्ता को अतिरिक्त जानकारी देने की ज़रूरत नहीं होती. उदाहरण के लिए, अगर उपयोगकर्ता माउस, ट्रैकपैड, टचस्क्रीन, स्टाइलस वगैरह से किसी बटन पर क्लिक करता है, तो वह काम करना चाहिए. साथ ही, आपको उपयोगकर्ता को यह बताने की ज़रूरत नहीं है कि बटन को चालू करने के लिए, इन अलग-अलग डिवाइसों का इस्तेमाल किया जा सकता है.
हालांकि, कुछ मामलों में इनपुट के तरीके से उपयोगकर्ता के अनुभव को बेहतर बनाया जा सकता है. ऐसे में, उन्हें यह बताना सही होगा कि आपका ऐप्लिकेशन इस सुविधा के साथ काम करता है. कुछ उदाहरण:
- मीडिया चलाने वाले ऐप्लिकेशन में, कीबोर्ड के कई शॉर्टकट काम करते हैं. हालांकि, उपयोगकर्ता को इनके बारे में आसानी से पता नहीं चल पाता.
- अगर आपने कोई डीजे ऐप्लिकेशन बनाया है, तो हो सकता है कि उपयोगकर्ता शुरुआत में टचस्क्रीन का इस्तेमाल करे. साथ ही, उसे यह पता न हो कि आपने उसे कुछ सुविधाओं को ऐक्सेस करने के लिए, कीबोर्ड/ट्रैकपैड का इस्तेमाल करने की अनुमति दी है. इसी तरह, उन्हें यह भी नहीं पता होगा कि आपके पास कई एमआईडीआई डीजे कंट्रोलर हैं. इसलिए, उन्हें यह सुझाव देना कि वे आपके पास मौजूद हार्डवेयर को आज़माएं, डीजेइंग का ज़्यादा बेहतर अनुभव दे सकता है.
- ऐसा हो सकता है कि आपका गेम टचस्क्रीन और कीबोर्ड/माउस के साथ बहुत अच्छा काम करता हो. हालांकि, लोगों को यह पता न हो कि यह गेम, ब्लूटूथ से कनेक्ट होने वाले कई गेम कंट्रोलर के साथ भी काम करता है. इनमें से किसी एक को कनेक्ट करने से, उपयोगकर्ता की संतुष्टि और दिलचस्पी बढ़ सकती है.
सही समय पर मैसेज भेजकर, उपयोगकर्ताओं को इनपुट के विकल्पों के बारे में बताया जा सकता है. हर ऐप्लिकेशन के लिए, इसे लागू करने का तरीका अलग-अलग होगा. यहां कुछ उदाहरण दिए गए हैं:
- पहली बार इस्तेमाल करने वालों के लिए पॉप-अप या दिन की सलाह देने वाले पॉप-अप
- सेटिंग पैनल में कॉन्फ़िगरेशन के विकल्प, उपयोगकर्ताओं को यह जानकारी दे सकते हैं कि सहायता उपलब्ध है. उदाहरण के लिए, किसी गेम की सेटिंग पैनल में “गेम कंट्रोलर” टैब से पता चलता है कि कंट्रोलर काम करते हैं.
- कॉन्टेक्स्ट के हिसाब से मैसेज. उदाहरण के लिए, अगर आपको पता चलता है कि उपयोगकर्ता के पास फ़िज़िकल कीबोर्ड है और वह माउस या टचस्क्रीन का इस्तेमाल करके कोई कार्रवाई कर रहा है, तो आपको कीबोर्ड शॉर्टकट का सुझाव देने वाला एक मददगार हिंट दिखाना चाहिए
- कीबोर्ड शॉर्टकट की सूचियां. जब किसी फ़िज़िकल कीबोर्ड का पता चलता है, तो यूज़र इंटरफ़ेस (यूआई) में यह जानकारी दी जाती है कि कीबोर्ड शॉर्टकट की सूची कैसे लाई जाए. इससे दो मकसद पूरे होते हैं. पहला, यह जानकारी मिलती है कि कीबोर्ड का इस्तेमाल किया जा सकता है. दूसरा, इससे उपयोगकर्ताओं को कीबोर्ड शॉर्टकट की सूची देखने और उन्हें याद रखने में आसानी होती है
इनपुट वैरिएशन के लिए यूज़र इंटरफ़ेस (यूआई) लेबलिंग/लेआउट
अगर किसी दूसरे इनपुट डिवाइस का इस्तेमाल किया जाता है, तो आपके विज़ुअल इंटरफ़ेस में ज़्यादा बदलाव नहीं होना चाहिए. साथ ही, सभी संभावित इनपुट “बस काम करने चाहिए”. हालांकि, इसके कुछ अपवाद भी हैं. इनमें से दो मुख्य सुविधाएं हैं: टच-स्पेसिफ़िक यूज़र इंटरफ़ेस (यूआई) और स्क्रीन पर दिखने वाले प्रॉम्प्ट.
टच के हिसाब से यूज़र इंटरफ़ेस (यूआई)
जब भी आपके ऐप्लिकेशन में टच-स्पेसिफ़िक यूज़र इंटरफ़ेस (यूआई) एलिमेंट हों, जैसे कि गेम में ऑन-स्क्रीन जॉयस्टिक, तो आपको यह सोचना चाहिए कि जब टच का इस्तेमाल नहीं किया जा रहा हो, तो उपयोगकर्ता का अनुभव कैसा होगा. कुछ मोबाइल गेम में, स्क्रीन का ज़्यादातर हिस्सा कंट्रोल के लिए इस्तेमाल किया जाता है. ये कंट्रोल, टचस्क्रीन से खेलने के लिए ज़रूरी होते हैं. हालांकि, अगर उपयोगकर्ता गेम खेलने के लिए गेमपैड या कीबोर्ड का इस्तेमाल कर रहा है, तो ये कंट्रोल ज़रूरी नहीं होते. आपके ऐप्लिकेशन या गेम में, यह पता लगाने की सुविधा होनी चाहिए कि इनपुट के लिए किस तरीके का इस्तेमाल किया जा रहा है. साथ ही, इसके हिसाब से यूज़र इंटरफ़ेस (यूआई) को अडजस्ट करने की सुविधा भी होनी चाहिए. इसे लागू करने के कुछ उदाहरण देखने के लिए, नीचे दिया गया लागू करने का सेक्शन देखें.
स्क्रीन पर दिखने वाले निर्देश
ऐसा हो सकता है कि आपका ऐप्लिकेशन, उपयोगकर्ताओं को स्क्रीन पर काम के प्रॉम्प्ट दिखा रहा हो. ध्यान रखें कि ये इनपुट डिवाइस पर निर्भर न हों. उदाहरण के लिए:
- स्वाइप करके…
- बंद करने के लिए कहीं भी टैप करें
- पिंच करके ज़ूम करने की सुविधा
- ‘X’ दबाकर…
- चालू करने के लिए, दबाकर रखें
कुछ ऐप्लिकेशन, इनपुट के हिसाब से अपने शब्दों में बदलाव कर सकते हैं. यह तरीका उन मामलों में बेहतर है जहां यह काम करता है. हालांकि, कई मामलों में सटीक जानकारी देना ज़रूरी होता है. साथ ही, आपको इस्तेमाल किए जा रहे इनपुट के तरीके के हिसाब से अलग-अलग मैसेज दिखाने पड़ सकते हैं. खास तौर पर, ट्यूटोरियल वाले मोड में, जैसे कि ऐप्लिकेशन को पहली बार चलाने पर.
एक से ज़्यादा भाषाओं में उपलब्ध होने से जुड़ी बातें
अगर आपका ऐप्लिकेशन कई भाषाओं में काम करता है, तो आपको स्ट्रिंग आर्किटेक्चर के बारे में सोचना होगा. उदाहरण के लिए, अगर आपके पास तीन इनपुट मोड और पांच भाषाएँ हैं, तो इसका मतलब है कि यूज़र इंटरफ़ेस (यूआई) पर दिखने वाले हर मैसेज के 15 अलग-अलग वर्शन हो सकते हैं. इससे नई सुविधाएं जोड़ने के लिए, ज़्यादा काम करना पड़ेगा. साथ ही, स्पेलिंग की गलतियां होने की संभावना बढ़ जाएगी.
एक तरीका यह है कि इंटरफ़ेस की कार्रवाइयों को स्ट्रिंग का एक अलग सेट माना जाए. उदाहरण के लिए, अगर आपने “बंद करें” कार्रवाई को इनपुट के हिसाब से अलग-अलग वैरिएंट वाले स्ट्रिंग वैरिएबल के तौर पर तय किया है, जैसे कि “बंद करने के लिए कहीं भी टैप करें”, “बंद करने के लिए ‘Esc’ दबाएं”, “बंद करने के लिए कहीं भी क्लिक करें”, “बंद करने के लिए कोई भी बटन दबाएं”, तो आपके यूज़र इंटरफ़ेस (यूआई) के वे सभी मैसेज इस एक “बंद करें” स्ट्रिंग वैरिएबल का इस्तेमाल कर सकते हैं जिनमें उपयोगकर्ता को यह बताना है कि किसी चीज़ को कैसे बंद किया जाए. इनपुट का तरीका बदलने पर, इस एक वैरिएबल की वैल्यू बदलें.
सॉफ़्ट कीबोर्ड / IME इनपुट
ध्यान रखें कि अगर कोई व्यक्ति किसी ऐप्लिकेशन का इस्तेमाल बिना फ़िज़िकल कीबोर्ड के कर रहा है, तो टेक्स्ट इनपुट, ऑन-स्क्रीन कीबोर्ड के ज़रिए किया जा सकता है. यह ज़रूर जांच लें कि ऑन-स्क्रीन कीबोर्ड दिखने पर, ज़रूरी यूज़र इंटरफ़ेस (यूआई) एलिमेंट न दिखें. ज़्यादा जानकारी के लिए, Android IME की विज़िबिलिटी से जुड़ा दस्तावेज़ देखें.
लागू करना
ज़्यादातर मामलों में, ऐप्लिकेशन या गेम को सभी मान्य इनपुट का सही जवाब देना चाहिए. भले ही, स्क्रीन पर कुछ भी दिखाया गया हो. अगर कोई व्यक्ति 10 मिनट तक टच-स्क्रीन का इस्तेमाल करता है, लेकिन फिर अचानक कीबोर्ड का इस्तेमाल करने लगता है, तो कीबोर्ड इनपुट काम करना चाहिए. भले ही, स्क्रीन पर विज़ुअल प्रॉम्प्ट या कंट्रोल मौजूद हों. दूसरे शब्दों में कहें, तो विज़ुअल/टेक्स्ट के बजाय फ़ंक्शन पर ज़्यादा ध्यान देना चाहिए. इससे यह पक्का करने में मदद मिलती है कि आपके ऐप्लिकेशन/गेम का इस्तेमाल किया जा सकेगा. भले ही, इनपुट का पता लगाने वाले लॉजिक में कोई गड़बड़ी हो या कोई अनचाही स्थिति पैदा हो.
अगला चरण, इनपुट के लिए इस्तेमाल किए जा रहे मौजूदा तरीके के हिसाब से सही यूज़र इंटरफ़ेस (यूआई) दिखाना है. इसका सटीक तरीके से पता कैसे लगाया जाता है? अगर उपयोगकर्ता, आपके ऐप्लिकेशन का इस्तेमाल करते समय अलग-अलग इनपुट मेथड के बीच स्विच करते हैं, तो क्या होगा? अगर वे एक साथ कई तरीकों का इस्तेमाल कर रहे हैं, तो क्या होगा?
मिले हुए इवेंट के आधार पर प्राथमिकता तय करने वाली स्टेट मशीन
एक तरीका यह है कि “ऐक्टिव इनपुट स्टेट” को ट्रैक किया जाए. यह उपयोगकर्ता को फ़िलहाल स्क्रीन पर दिख रहे इनपुट प्रॉम्प्ट को दिखाता है. इसके लिए, ऐप्लिकेशन को मिल रहे असली इनपुट इवेंट को ट्रैक किया जाता है. साथ ही, प्राथमिकता वाले लॉजिक का इस्तेमाल करके, स्टेट के बीच ट्रांज़िशन किया जाता है.
प्राथमिकता
इनपुट की स्थितियों को प्राथमिकता क्यों दें? उपयोगकर्ता अपने डिवाइसों से अलग-अलग तरीकों से इंटरैक्ट करते हैं. आपका ऐप्लिकेशन, उनकी पसंद के हिसाब से काम करना चाहिए. उदाहरण के लिए, अगर कोई उपयोगकर्ता एक ही समय में टचस्क्रीन और ब्लूटूथ माउस का इस्तेमाल करता है, तो उसे यह सुविधा मिलनी चाहिए. हालांकि, आपको स्क्रीन पर कौनसे इनपुट प्रॉम्प्ट और कंट्रोल दिखाने चाहिए? माउस या टच?
हर सेट के प्रॉम्प्ट को “इनपुट स्टेट” के तौर पर तय करने और फिर उन्हें प्राथमिकता देने से, इस बारे में लगातार फ़ैसले लेने में मदद मिल सकती है.
मिले हुए इनपुट इवेंट से स्थिति तय होती है
सिर्फ़ मिले हुए इनपुट इवेंट पर कार्रवाई क्यों की जाती है? आपको लग सकता है कि ब्लूटूथ कनेक्शन को ट्रैक करके यह पता लगाया जा सकता है कि कोई ब्लूटूथ कंट्रोलर अटैच है या नहीं. इसके अलावा, यूएसबी डिवाइसों के लिए यूएसबी कनेक्शन की निगरानी की जा सकती है. हम दो मुख्य वजहों से इस तरीके का सुझाव नहीं देते.
सबसे पहले, एपीआई वैरिएबल के आधार पर कनेक्ट किए गए डिवाइसों के बारे में अनुमान लगाई गई जानकारी एक जैसी नहीं होती. साथ ही, ब्लूटूथ/हार्डवेयर/स्टाइलस डिवाइसों की संख्या लगातार बढ़ रही है.
कनेक्शन की स्थिति के बजाय, मिले हुए इवेंट का इस्तेमाल करने की दूसरी वजह यह है कि उपयोगकर्ताओं के पास माउस, ब्लूटूथ कंट्रोलर, MIDI कंट्रोलर वगैरह कनेक्ट हो सकते हैं. हालांकि, वे इनका इस्तेमाल आपके ऐप्लिकेशन या गेम के साथ इंटरैक्ट करने के लिए नहीं कर रहे हों.
आपके ऐप्लिकेशन को मिलने वाले इनपुट इवेंट का जवाब देने से, यह पक्का होता है कि आप अपने उपयोगकर्ताओं की असल कार्रवाइयों का जवाब रीयल-टाइम में दे रहे हैं. साथ ही, अधूरी जानकारी के आधार पर उनके इरादों का अनुमान लगाने की कोशिश नहीं कर रहे हैं.
उदाहरण: ऐसा गेम जिसमें टच, कीबोर्ड/माउस, और कंट्रोलर का इस्तेमाल किया जा सकता हो
मान लें कि आपने टचस्क्रीन वाले मोबाइल फ़ोन के लिए, कार रेसिंग गेम बनाया है. खिलाड़ी, कार की स्पीड बढ़ा सकते हैं, कम कर सकते हैं, दाईं ओर मुड़ सकते हैं, बाईं ओर मुड़ सकते हैं या स्पीड बढ़ाने के लिए नाइट्रो का इस्तेमाल कर सकते हैं.
मौजूदा टचस्क्रीन इंटरफ़ेस में, स्पीड और दिशा को कंट्रोल करने के लिए स्क्रीन पर सबसे नीचे बाईं ओर जॉयस्टिक दी गई है. साथ ही, नाइट्रो के लिए सबसे नीचे दाईं ओर एक बटन दिया गया है. उपयोगकर्ता, ट्रैक पर नाइट्रो कैनिस्टर इकट्ठा कर सकता है. जब स्क्रीन के सबसे नीचे मौजूद नाइट्रो बार भर जाता है, तो बटन के ऊपर एक मैसेज दिखता है. इसमें लिखा होता है कि “नाइट्रो के लिए दबाएं!”. अगर यह उपयोगकर्ता का पहला गेम है या कुछ समय से कोई इनपुट नहीं मिला है, तो जॉयस्टिक के ऊपर “ट्यूटोरियल” टेक्स्ट दिखता है. इसमें उपयोगकर्ता को कार चलाने का तरीका बताया जाता है.
आपको कीबोर्ड और ब्लूटूथ गेम कंट्रोलर की सुविधा जोड़नी है. शुरुआत कहां से करें?
इनपुट की स्थितियां
सबसे पहले, उन सभी इनपुट स्टेट की पहचान करें जिनमें आपका गेम चल सकता है. इसके बाद, उन सभी पैरामीटर की सूची बनाएं जिन्हें आपको हर स्टेट में बदलना है.
| टच करके लॉक या अनलॉक करें | कीबोर्ड/माउस | गेमनियंत्रक | |
|---|---|---|---|
|
इस पर प्रतिक्रिया दी जाती है |
सभी इनपुट |
सभी इनपुट |
सभी इनपुट |
|
स्क्रीन पर दिए गए कंट्रोल |
- ऑन-स्क्रीन जॉयस्टिक |
- जॉयस्टिक नहीं है |
- जॉयस्टिक नहीं है |
|
टेक्स्ट |
Nitro के लिए टैप करें! |
Nitro के लिए "N" दबाएं! |
Nitro के लिए "A" दबाएं! |
|
ट्यूटोरियल |
स्पीड/दिशा के लिए जॉयस्टिक की इमेज |
स्पीड/दिशा के लिए ऐरो बटन और WASD की इमेज |
स्पीड/दिशा के लिए गेमपैड की इमेज |
“ऐक्टिव इनपुट” की स्थिति को ट्रैक करें. इसके बाद, उस स्थिति के आधार पर यूज़र इंटरफ़ेस (यूआई) को ज़रूरत के हिसाब से अपडेट करें.
ध्यान दें: याद रखें कि आपके गेम/ऐप्लिकेशन को सभी इनपुट तरीकों से जवाब देना चाहिए, भले ही उसकी स्थिति कुछ भी हो. उदाहरण के लिए, अगर कोई व्यक्ति टचस्क्रीन से कार चला रहा है, लेकिन कीबोर्ड पर N दबाता है, तो नाइट्रो ऐक्शन ट्रिगर होना चाहिए.
प्राथमिकता के आधार पर स्थिति में बदलाव
कुछ लोग, टचस्क्रीन और कीबोर्ड इनपुट का इस्तेमाल एक साथ कर सकते हैं. कुछ लोग, टैबलेट मोड में सोफ़े पर बैठकर आपके गेम/ऐप्लिकेशन का इस्तेमाल शुरू कर सकते हैं. इसके बाद, वे टेबल पर कीबोर्ड का इस्तेमाल शुरू कर सकते हैं. अन्य लोग, गेम के बीच में गेम कंट्रोलर कनेक्ट या डिसकनेक्ट कर सकते हैं.
आदर्श रूप से, आपको गलत यूज़र इंटरफ़ेस (यूआई) एलिमेंट नहीं चाहिए. जैसे, उपयोगकर्ता को टचस्क्रीन का इस्तेमाल करते समय n बटन दबाने के लिए कहना. साथ ही, अगर उपयोगकर्ता एक साथ कई इनपुट डिवाइसों का इस्तेमाल कर रहे हैं, जैसे कि टचस्क्रीन और कीबोर्ड, तो आपको यूज़र इंटरफ़ेस (यूआई) को लगातार दो स्थितियों के बीच स्वैप नहीं करना है.
इसे मैनेज करने का एक तरीका यह है कि इनपुट टाइप की प्राथमिकताएं तय की जाएं. साथ ही, स्टेट में बदलावों के बीच कुछ समय का अंतर रखा जाए. ऊपर दिए गए कार गेम के लिए, आपको हमेशा यह पक्का करना होगा कि स्क्रीन पर मौजूद जॉयस्टिक तब दिखे, जब स्क्रीन टच इवेंट मिल रहे हों. ऐसा न होने पर, उपयोगकर्ता को गेम का इस्तेमाल करने में परेशानी हो सकती है. इससे टचस्क्रीन को सबसे ज़्यादा प्राथमिकता वाला डिवाइस बना दिया जाएगा.
अगर कीबोर्ड और टचस्क्रीन इवेंट एक साथ मिल रहे हैं, तो गेम को टचस्क्रीन मोड में रहना चाहिए. हालांकि, यह कीबोर्ड इनपुट पर भी प्रतिक्रिया देगा. अगर पांच सेकंड तक टचस्क्रीन से कोई इनपुट नहीं मिलता है और कीबोर्ड इवेंट अब भी मिल रहे हैं, तो हो सकता है कि ऑन-स्क्रीन कंट्रोल धुंधले हो जाएं और गेम कीबोर्ड मोड में चला जाए.
गेम कंट्रोलर के इनपुट के लिए भी इसी तरह का पैटर्न फ़ॉलो किया जाएगा: कंट्रोलर के यूज़र इंटरफ़ेस (यूआई) की स्थिति को कीबोर्ड/माउस और टच की तुलना में कम प्राथमिकता दी जाएगी. साथ ही, यह सिर्फ़ तब दिखेगा, जब गेम कंट्रोलर से इनपुट मिल रहा हो और इनपुट के अन्य तरीके इस्तेमाल न किए जा रहे हों. गेम हमेशा कंट्रोलर के इनपुट पर प्रतिक्रिया देगा.
यहां उदाहरण के लिए, स्टेट डायग्राम और ट्रांज़िशन टेबल दी गई है. अपने ऐप्लिकेशन या गेम के हिसाब से आइडिया को ढालें.
| #1 टचस्क्रीन | #2 कीबोर्ड | #3 गेमपैड | |
|---|---|---|---|
|
#1 पर ले जाएं |
लागू नहीं |
- टच इनपुट मिला |
- टच इनपुट मिला |
|
#2 पर ले जाएं |
- पांच सेकंड तक कोई टच नहीं किया गया |
लागू नहीं |
- कीबोर्ड से टाइप करके मैसेज भेजने का बटन |
|
#3 पर ले जाएं |
- पांच सेकंड तक कोई टच नहीं किया गया |
- पांच सेकंड तक कीबोर्ड का इस्तेमाल न किया गया हो |
लागू नहीं |
ध्यान दें: प्राथमिकता तय करने से यह साफ़ तौर पर पता चलता है कि किस तरह के इनपुट को ज़्यादा अहमियत दी जानी चाहिए. इनपुट की स्थिति को तुरंत प्राथमिकता दी जाती है:
3. गेमपैड -> 2. कीबोर्ड -> 1. टच करके लॉक या अनलॉक करें
ज़्यादा प्राथमिकता वाले डिवाइस का इस्तेमाल शुरू होते ही, कम प्राथमिकता वाले डिवाइस की प्राथमिकता कम हो जाती है. हालांकि, यह धीरे-धीरे होता है. ऐसा तब होता है, जब कुछ समय तक कम प्राथमिकता वाले डिवाइस का इस्तेमाल नहीं किया जाता है और कम प्राथमिकता वाले डिवाइस का इस्तेमाल किया जा रहा हो.
इनपुट इवेंट
यहां Android के स्टैंडर्ड एपीआई का इस्तेमाल करके, अलग-अलग तरह के इनपुट डिवाइसों से इनपुट इवेंट का पता लगाने के तरीके का उदाहरण दिया गया है. ऊपर दिए गए उदाहरण की तरह, अपनी स्टेट मशीन को चलाने के लिए इन इवेंट का इस्तेमाल करें. आपको सामान्य कॉन्सेप्ट को, अपने ऐप्लिकेशन या गेम के हिसाब से और उन इनपुट इवेंट के हिसाब से ढालना चाहिए जिनकी आपको ज़रूरत है.
कीबोर्ड और कंट्रोलर के बटन
// Drive the state machine based on the received input type // onKeyDown drives the state machine, but does not trigger game actions // Both keyboard and game controller events come through as key events override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean { if (event != null) { // Check input source val outputMessage = when (event.source) { SOURCE_KEYBOARD -> { MyStateMachine.KeyboardEventReceived() "Keyboard event" } SOURCE_GAMEPAD -> { MyStateMachine.ControllerEventReceived() "Game controller event" } else -> "Other key event: ${event.source}" } // Do something based on source type findViewById(R.id.text_message).text = outputMessage } // Pass event up to system return super.onKeyDown(keyCode, event) }
// Trigger game events based on key release // Both keyboard and game controller events come through as key events override fun onKeyUp(keyCode: Int, event: KeyEvent?): Boolean { when(keyCode) { KeyEvent.KEYCODE_N -> { MyStateMachine.keyboardEventReceived() engageNitro() return true // event handled here, return true } } // If event not handled, pass up to system return super.onKeyUp(keyCode, event) }
ध्यान दें: मुख्य इवेंट के लिए, onKeyDown() या onKeyUp() में से किसी एक का इस्तेमाल किया जा सकता है. यहां, onKeyDown() का इस्तेमाल स्टेट मशीन को कंट्रोल करने के लिए किया जाता है. वहीं, onKeyUp() का इस्तेमाल गेम इवेंट को ट्रिगर करने के लिए किया जाता है.
अगर कोई उपयोगकर्ता किसी बटन को दबाकर रखता है, तो onKeyUp() को हर बार बटन दबाने पर सिर्फ़ एक बार ट्रिगर किया जाएगा. वहीं, onKeyDown() को कई बार कॉल किया जाएगा. अगर आपको डाउन प्रेस पर प्रतिक्रिया देनी है, तो आपको onKeyDown() में गेम इवेंट मैनेज करने चाहिए. साथ ही, बार-बार होने वाले इवेंट को मैनेज करने के लिए लॉजिक लागू करना चाहिए. ज़्यादा जानकारी के लिए, कीबोर्ड की कार्रवाइयों को मैनेज करना दस्तावेज़ देखें.
टच और स्टाइलस
// Touch and stylus events come through as touch events override fun onTouchEvent(event: MotionEvent?): Boolean { if (event != null) { // Get tool type val pointerIndex = event.action and ACTION_POINTER_INDEX_MASK shr ACTION_POINTER_INDEX_SHIFT val toolType = event.getToolType(pointerIndex) // Check tool type val outputMessage = when (toolType) { TOOL_TYPE_FINGER -> { MyStateMachine.TouchEventReceived() "Touch event" } TOOL_TYPE_STYLUS -> { MyStateMachine.StylusEventReceived() "Stylus event" } else -> "Other touch event: ${toolType}" } // Do something based on tool type, return true if event handled findViewById(R.id.text_message).text = outputMessage } // If event not handled, pass up to system return super.onGenericMotionEvent(event) }
माउस और जॉयस्टिक
// Mouse and joystick events come through as generic events override fun onGenericMotionEvent(event: MotionEvent?): Boolean { if (event != null) { // Check input source val outputMessage = when (event.source) { SOURCE_JOYSTICK -> { MyStateMachine.ControllerEventReceived() "Controller event" } SOURCE_MOUSE -> { MyStateMachine.MouseEventReceived() "Mouse event" } else -> "Other generic event: ${event.source}" } // Do something based on source type, return true if event handled findViewById(R.id.text_message).text = outputMessage } // If event not handled, pass up to system return super.onGenericMotionEvent(event) }