टेलीविज़न स्क्रीन पर कई ऐसी बातें दिखती हैं जो मोबाइल गेम डेवलपर के लिए नई हो सकती हैं. इनमें इसका बड़ा साइज़, कंट्रोल स्कीम, और यह तथ्य शामिल है कि सभी खिलाड़ी इसे एक साथ देख रहे हैं.
डिसप्ले
टीवी स्क्रीन के लिए गेम डेवलप करते समय, इन दो मुख्य बातों का ध्यान रखें: अपने गेम को लैंडस्केप ओरिएंटेशन के लिए डिज़ाइन करें और कम समय में जवाब देने की सुविधा उपलब्ध कराएं.
लैंडस्केप मोड में डिसप्ले करने की सुविधा
टीवी हमेशा आड़ा होता है: इसे घुमाया नहीं जा सकता और इसमें पोर्ट्रेट मोड नहीं होता. अपने टीवी गेम को हमेशा लैंडस्केप मोड में दिखाने के लिए डिज़ाइन करें.
ऑटो लो-लेटेंसी मोड
कुछ डिसप्ले, ग्राफ़िक्स की पोस्ट-प्रोसेसिंग कर सकते हैं. पोस्ट-प्रोसेसिंग से ग्राफ़िक्स की क्वालिटी बेहतर होती है. हालांकि, इससे लेटेन्सी बढ़ सकती है. एचडीएमआई 2.1 के साथ काम करने वाले नए डिसप्ले में, ऑटो लो लेटेंसी मोड (ALLM) होता है. यह पोस्ट-प्रोसेसिंग को बंद करके, लेटेंसी को कम करता है. ALLM के बारे में ज़्यादा जानकारी के लिए, HDMI 2.1 स्पेसिफ़िकेशन देखें. अन्य डिसप्ले में भी, इसी तरह के व्यवहार वाला गेम मोड काम कर सकता है.
Android 11 और इसके बाद के वर्शन में, कोई विंडो कम से कम पोस्ट-प्रोसेसिंग का अनुरोध करके, ऑटो लो लेटेंसी मोड या गेम मोड का इस्तेमाल करने का अनुरोध कर सकती है. हालांकि, ऐसा तब ही किया जा सकता है, जब ये मोड उपलब्ध हों. यह खास तौर पर गेम और वीडियो कॉन्फ़्रेंसिंग ऐप्लिकेशन के लिए फ़ायदेमंद है. इनमें सबसे अच्छे ग्राफ़िक्स से ज़्यादा, कम समय में डेटा ट्रांसफ़र होना ज़रूरी होता है.
पोस्ट-प्रोसेसिंग की सुविधा को चालू या बंद करने के लिए, Window.setPreferMinimalPostProcessing()
को कॉल करें या विंडो के preferMinimalPostProcessing
एट्रिब्यूट को true
पर सेट करें. सभी डिसप्ले में पोस्ट-प्रोसेसिंग की सुविधा नहीं होती. यह पता लगाने के लिए कि किसी डिसप्ले में यह सुविधा है या नहीं, Display.isMinimalPostProcessingSupported()
मेथड को कॉल करें.
इनपुट डिवाइस
टीवी में टच इंटरफ़ेस नहीं होते हैं. इसलिए, यह ज़रूरी है कि आपके कंट्रोल सही तरीके से काम करें. साथ ही, यह भी पक्का करें कि खिलाड़ियों को वे इस्तेमाल करने में आसान और मज़ेदार लगें. कंट्रोलर को मैनेज करने से जुड़ी कुछ अन्य समस्याएं भी हो सकती हैं. जैसे, एक से ज़्यादा कंट्रोलर को ट्रैक करना और कंट्रोलर के डिसकनेक्ट होने की समस्या को ठीक करना. गेम के साथ-साथ सभी टीवी ऐप्लिकेशन में, कंट्रोलर को एक जैसा काम करना चाहिए. टीवी कंट्रोलर इस्तेमाल करने के बारे में ज़्यादा जानने के लिए, टीवी कंट्रोलर मैनेज करना लेख पढ़ें. साथ ही, गेम के लिए टीवी कंट्रोलर इस्तेमाल करने के बारे में खास जानकारी पाने के लिए, गेम के लिए कंट्रोलर मैनेज करना लेख पढ़ें.
कीबोर्ड लेआउट
Android 13 (एपीआई लेवल 33) और इसके बाद के वर्शन में, getKeyCodeForKeyLocation()
का इस्तेमाल करके कीबोर्ड लेआउट तय किए जा सकते हैं.
उदाहरण के लिए, आपके गेम में WASD बटन का इस्तेमाल करके मूवमेंट किया जा सकता है. हालांकि, AZERTY कीबोर्ड पर यह सुविधा ठीक से काम नहीं कर सकती, क्योंकि इसमें A और W बटन अलग-अलग जगहों पर होते हैं. आपको उन कुंजियों के लिए कीकोड मिल सकते हैं जो आपको कुछ खास पोज़िशन पर चाहिए:
Kotlin
val inputManager: InputManager? = requireActivity().getSystemService() inputManager?.inputDeviceIds?.map { inputManager.getInputDevice(it) } ?.firstOrNull { it.keyboardType == InputDevice.KEYBOARD_TYPE_ALPHABETIC } ?.let { inputDevice -> keyUp = inputDevice.getKeyCodeForKeyLocation(KeyEvent.KEYCODE_W) keyLeft = inputDevice.getKeyCodeForKeyLocation(KeyEvent.KEYCODE_A) keyDown = inputDevice.getKeyCodeForKeyLocation(KeyEvent.KEYCODE_S) keyRight = inputDevice.getKeyCodeForKeyLocation(KeyEvent.KEYCODE_D) }
Java
InputManager inputManager = requireActivity().getSystemService(InputManager.class); InputDevice inputDevice = Arrays.stream(inputManager.getInputDeviceIds()) .mapToObj(inputManager::getInputDevice) .filter( device -> device.getKeyboardType() == InputDevice.KEYBOARD_TYPE_ALPHABETIC) .filter(Objects::nonNull) .findFirst() .orElse(null); if (inputDevice != null) { keyUp = inputDevice.getKeyCodeForKeyLocation(KeyEvent.KEYCODE_W); keyLeft = inputDevice.getKeyCodeForKeyLocation(KeyEvent.KEYCODE_A); keyDown = inputDevice.getKeyCodeForKeyLocation(KeyEvent.KEYCODE_S); keyRight = inputDevice.getKeyCodeForKeyLocation(KeyEvent.KEYCODE_D); }
इस उदाहरण में, AZERTY कीबोर्ड के साथ keyUp
को KeyEvent.KEYCODE_Z
पर, keyLeft
को KeyEvent.KEYCODE_Q
पर सेट किया गया है. वहीं, keyDown
और keyRight
को क्रमशः KeyEvent.KEYCODE_S
और KeyEvent.KEYCODE_D
पर सेट किया गया है. अब इन मुख्य कोड के लिए मुख्य इवेंट हैंडलर बनाए जा सकते हैं और उम्मीद के मुताबिक व्यवहार लागू किया जा सकता है.
मेनिफ़ेस्ट
कुछ खास चीज़ें हैं जिन्हें गेम को Android मेनिफ़ेस्ट में शामिल करना चाहिए.
होम स्क्रीन पर गेम दिखाना
Android TV की होम स्क्रीन पर, गेम को सामान्य ऐप्लिकेशन से अलग लाइन में दिखाया जाता है.
अपने गेम को गेम की सूची में दिखाने के लिए, अपने ऐप्लिकेशन मेनिफ़ेस्ट के <application>
टैग में,
android:isGame
एट्रिब्यूट को "true"
पर सेट करें. उदाहरण के लिए:
<application ... android:isGame="true" ... >
गेम कंट्रोलर के साथ काम करने की सुविधा के बारे में जानकारी देना
ऐसा हो सकता है कि टीवी डिवाइस के उपयोगकर्ताओं के लिए, गेम कंट्रोलर उपलब्ध न हों या काम न करें. उपयोगकर्ताओं को यह बताने के लिए कि आपका गेम, गेम कंट्रोलर के साथ काम करता है, आपको अपने ऐप्लिकेशन मेनिफ़ेस्ट में यह एंट्री शामिल करनी होगी:
<uses-feature android:name="android.hardware.gamepad" android:required="false"/>
ध्यान दें: android:hardware:gamepad
की सुविधा के बारे में बताते समय, android:required
एट्रिब्यूट को "true"
पर सेट न करें. ऐसा करने पर, उपयोगकर्ता टीवी डिवाइसों पर आपका ऐप्लिकेशन इंस्टॉल नहीं कर पाएंगे.
मेनिफ़ेस्ट एंट्री के बारे में ज़्यादा जानकारी के लिए, ऐप्लिकेशन मेनिफ़ेस्ट देखें.
Google Play गेम्स सेवाएं
अगर आपके गेम में Google Play की गेम सेवाएं इंटिग्रेट की गई हैं, तो आपको उपलब्धियों, साइन-इन करने, और गेम सेव करने से जुड़ी कई बातों का ध्यान रखना चाहिए.
उपलब्धियां
आपके गेम में कम से कम पांच (हासिल की जा सकने वाली) उपलब्धियां होनी चाहिए. सिर्फ़ गेमप्ले को कंट्रोल करने वाले उपयोगकर्ता को उपलब्ध इनपुट डिवाइस से उपलब्धियां पाने की अनुमति होनी चाहिए. उपलब्धियों और उन्हें लागू करने के तरीके के बारे में ज़्यादा जानने के लिए, Android में उपलब्धियां लेख पढ़ें.
साइन-इन करें
आपका गेम लॉन्च होने पर, उपयोगकर्ता को साइन इन करने का विकल्प देना चाहिए. अगर कोई खिलाड़ी लगातार कई बार साइन इन करने से मना करता है, तो आपके गेम को उससे साइन इन करने के लिए नहीं कहना चाहिए. साइन-इन करने के बारे में ज़्यादा जानने के लिए, Android पर साइन-इन करने की सुविधा लागू करना लेख पढ़ें.
सेव किया जा रहा है
गेम सेव करने के लिए, Google Play services सेव किए गए गेम का इस्तेमाल करें. आपके गेम को, गेम सेव करने की सुविधा को किसी खास Google खाते से जोड़ना चाहिए, ताकि अलग-अलग डिवाइसों पर भी उसकी पहचान की जा सके: भले ही, खिलाड़ी हैंडसेट या टीवी का इस्तेमाल कर रहा हो, गेम को उसी उपयोगकर्ता खाते से गेम सेव करने की जानकारी पाने में सक्षम होना चाहिए.
आपको अपने गेम के यूज़र इंटरफ़ेस (यूआई) में एक विकल्प भी देना चाहिए, ताकि खिलाड़ी स्थानीय और क्लाउड में सेव किए गए डेटा को मिटा सके. इस विकल्प को गेम की Settings
स्क्रीन पर रखा जा सकता है. Play Services का इस्तेमाल करके, सेव किए गए गेम की सुविधा लागू करने के बारे में ज़्यादा जानने के लिए, Android में सेव किए गए गेम लेख पढ़ें.
बाहर निकलें
यूज़र इंटरफ़ेस (यूआई) का ऐसा एलिमेंट उपलब्ध कराएं जो हर जगह एक जैसा हो और साफ़ तौर पर दिखे. इससे उपयोगकर्ता आसानी से गेम से बाहर निकल सके. इस एलिमेंट को डी-पैड नेविगेशन बटन से ऐक्सेस किया जा सकता है. बाहर निकलने के लिए, होम बटन पर भरोसा करने के बजाय ऐसा करें. ऐसा इसलिए, क्योंकि यह बटन अलग-अलग कंट्रोलर पर एक जैसा काम नहीं करता.
वेब
Android TV पर गेम के लिए, वेब ब्राउज़िंग की सुविधा चालू न करें. Android TV पर वेब ब्राउज़र काम नहीं करता.
ध्यान दें: सोशल मीडिया सेवाओं में लॉग इन करने के लिए, WebView
क्लास का इस्तेमाल किया जा सकता है.
नेटवर्किंग
गेम को बेहतर परफ़ॉर्मेंस देने के लिए, अक्सर ज़्यादा बैंडविड्थ की ज़रूरत होती है. साथ ही, कई उपयोगकर्ता बेहतर परफ़ॉर्मेंस के लिए, वाई-फ़ाई के बजाय इथरनेट को प्राथमिकता देते हैं. आपके ऐप्लिकेशन को वाई-फ़ाई और ईथरनेट, दोनों तरह के कनेक्शन की जांच करनी चाहिए. अगर आपका ऐप्लिकेशन सिर्फ़ टीवी के लिए है, तो आपको 3G/LTE सेवा की जांच करने की ज़रूरत नहीं है. ऐसा मोबाइल ऐप्लिकेशन के लिए किया जाता है.