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

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

डिसप्ले

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

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

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

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

कुछ डिसप्ले, ग्राफ़िक्स की पोस्ट-प्रोसेसिंग कर सकते हैं. पोस्ट-प्रोसेसिंग से ग्राफ़िक्स की क्वालिटी बेहतर होती है, लेकिन इससे लेटेन्सी बढ़ सकती है. एचडीएमआई 2.1 के साथ काम करने वाले नए डिसप्ले में, ऑटो लो लेटेंसी मोड (एएलएलएम) होता है. यह पोस्ट-प्रोसेसिंग को बंद करके, लेटेंसी को कम करता है. एएलएलएम के बारे में ज़्यादा जानने के लिए, एचडीएमआई 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/एलटीई सेवा की जांच करने की ज़रूरत नहीं है. ऐसा मोबाइल ऐप्लिकेशन के लिए किया जाता है.