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

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

डिसप्ले

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

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

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

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

कुछ डिसप्ले, ग्राफ़िक्स की पोस्ट-प्रोसेसिंग कर सकते हैं. इस पोस्ट-प्रोसेसिंग से ग्राफ़िक्स की क्वालिटी बेहतर होती है. हालांकि, इससे इंतज़ार का समय बढ़ सकता है. एचडीएमआई 2.1 के साथ काम करने वाले नए डिसप्ले में, ऑटो लो लेटेंसी मोड (ALLM) होता है. यह पोस्ट-प्रोसेसिंग को बंद करके, लेटेंसी को कम करता है. एएलएलएम के बारे में ज़्यादा जानने के लिए, एचडीएमआई 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 एट्रिब्यूट को "false" पर सेट करें. ऐसा तब करें, जब आपके गेम को स्टैंडर्ड टीवी रिमोट (डी-पैड) से भी खेला जा सकता हो. android:required को सिर्फ़ तब "true" पर सेट करें, जब आपका गेम खेलने के लिए गेम कंट्रोलर की ज़रूरत हो. android:required="true" को सेट करने पर, Android TV के लिए Google Play पर "गेमपैड ज़रूरी है" बैज और पहले से इंस्टॉल होने की चेतावनी दिखती है. ऐसा टीवी डिवाइसों पर इंस्टॉल करने से रोकने के बजाय किया जाता है.

मेनिफ़ेस्ट एंट्री के बारे में ज़्यादा जानने के लिए, ऐप्लिकेशन मेनिफ़ेस्ट देखें.

Google Play गेम सेवाएं

अगर आपके गेम में Google Play की गेम सेवाएं इंटिग्रेट की गई हैं, तो आपको उपलब्धियों, साइन-इन करने, और सेव किए गए गेम से जुड़ी कई बातों का ध्यान रखना चाहिए.

उपलब्धियां

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

साइन-इन करें

आपका गेम, लॉन्च होने पर उपयोगकर्ता को साइन इन करने का विकल्प देता हो. अगर खिलाड़ी लगातार कई बार साइन-इन करने से मना कर देता है, तो आपके गेम को साइन-इन करने के लिए नहीं पूछना चाहिए. साइन-इन करने के बारे में ज़्यादा जानने के लिए, Android पर साइन-इन करने की सुविधा लागू करना लेख पढ़ें.

सेव किया जा रहा है

गेम सेव करने के लिए, Google Play services की सेव किए गए गेम सुविधा का इस्तेमाल करें. आपके गेम को सेव किए गए गेम डेटा को किसी खास Google खाते से बाइंड करना चाहिए, ताकि उसे अलग-अलग डिवाइसों पर भी पहचाना जा सके: भले ही, खिलाड़ी हैंडसेट या टीवी का इस्तेमाल कर रहा हो, गेम को उसी उपयोगकर्ता खाते से सेव किए गए गेम डेटा की जानकारी को फ़ेच करना चाहिए.

आपको अपने गेम के यूज़र इंटरफ़ेस (यूआई) में एक विकल्प भी देना चाहिए. इससे खिलाड़ी, डिवाइस और क्लाउड में सेव किए गए डेटा को मिटा सकता है. इस विकल्प को गेम की Settings स्क्रीन पर दिखाया जा सकता है. Play Services का इस्तेमाल करके, सेव किए गए गेम की सुविधा लागू करने के बारे में खास जानकारी पाने के लिए, Android में सेव किए गए गेम देखें.

बाहर निकलें

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

वेब

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

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

नेटवर्किंग

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