बिल्ड टीवी गेम

टीवी स्क्रीन पर गेम दिखाने के लिए, मोबाइल गेम डेवलपर को कुछ बातों का ध्यान रखना होगा. ये बातें उनके लिए नई हो सकती हैं. इनमें टीवी का बड़ा साइज़, कंट्रोल करने का तरीका, और यह तथ्य शामिल है कि सभी खिलाड़ी एक साथ टीवी स्क्रीन पर गेम देखते हैं.

डिसप्ले

टीवी स्क्रीन के लिए गेम डेवलप करते समय, दो मुख्य बातों का ध्यान रखना चाहिए. पहला, गेम को लैंडस्केप ओरिएंटेशन के लिए डिज़ाइन करना. दूसरा, लो-लेटेंसी मोड की सुविधा देना.

लैंडस्केप डिसप्ले की सुविधा देना

टीवी हमेशा साइड में रखा जाता है. इसे घुमाया नहीं जा सकता. साथ ही, इसमें पोर्ट्रेट ओरिएंटेशन की सुविधा नहीं होती. टीवी के लिए गेम हमेशा लैंडस्केप मोड में दिखाने के लिए डिज़ाइन करें.

ऑटो लो-लेटेंसी मोड

कुछ डिसप्ले, ग्राफ़िक्स की पोस्ट-प्रोसेसिंग कर सकते हैं. पोस्ट-प्रोसेसिंग से ग्राफ़िक्स की क्वालिटी बेहतर होती है, लेकिन इससे लेटेंसी बढ़ सकती है. HDMI 2.1 की सुविधा वाले नए डिसप्ले में, लो-लेटेंसी मोड की सुविधा अपने-आप चालू होने (ALLM) की सुविधा होती है. इससे पोस्ट-प्रोसेसिंग बंद करके, लेटेंसी को कम किया जा सकता है. ALLM के बारे में ज़्यादा जानने के लिए, HDMI 2.1 की खास बातें देखें. अन्य डिसप्ले में, गेम मोड की सुविधा हो सकती है. इसका व्यवहार भी ALLM जैसा ही होता है.

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 सेवाओं का इस्तेमाल करके, सेव किए गए गेम को लागू करने के बारे में जानने के लिए, Android में सेव किए गए गेम लेख पढ़ें.

बाहर निकलें

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

वेब

Android TV के लिए गेम में, वेब ब्राउज़ करने की सुविधा चालू न करें. Android TV में, वेब ब्राउज़र की सुविधा नहीं होती.

ध्यान दें: सोशल मीडिया सेवाओं में लॉगिन करने के लिए, WebView क्लास का इस्तेमाल किया जा सकता है.

नेटवर्किंग

गेम को बेहतर परफ़ॉर्मेंस देने के लिए, अक्सर ज़्यादा बैंडविथ की ज़रूरत होती है. कई उपयोगकर्ता, वाई-फ़ाई के बजाय इथरनेट को प्राथमिकता देते हैं, ताकि गेम की परफ़ॉर्मेंस बेहतर हो. आपके ऐप्लिकेशन को वाई-फ़ाई और इथरनेट, दोनों के कनेक्शन की जांच करनी चाहिए. अगर आपका ऐप्लिकेशन सिर्फ़ टीवी के लिए है, तो आपको 3G/LTE सेवा की जांच करने की ज़रूरत नहीं है. हालांकि, मोबाइल ऐप्लिकेशन के लिए इसकी जांच करनी होती है.