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

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

डिसप्ले

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

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

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

लो-लेटेंसी मोड अपने-आप चालू होना

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

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

पोस्ट-प्रोसेसिंग को कम से कम करने की सुविधा को चालू या बंद करने के लिए, Window.setPreferMinimalPostProcessing() को कॉल करें या विंडो के preferMinimalPostProcessing एट्रिब्यूट को true पर सेट करें. सभी डिसप्ले, कम पोस्ट-प्रोसेसिंग की सुविधा के साथ काम नहीं करते. यह पता करने के लिए कि कोई डिसप्ले, कम पोस्ट-प्रोसेसिंग की सुविधा के साथ काम करता है या नहीं, Display.isMinimalPostProcessingSupported() मेथड को कॉल करें.

इनपुट डिवाइस

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

कीबोर्ड लेआउट

Android 13 (एपीआई लेवल 33) और उसके बाद के वर्शन में, getKeyCodeForKeyLocation() का इस्तेमाल करके कीबोर्ड लेआउट तय किए जा सकते हैं. उदाहरण के लिए, आपका गेम WASD बटन का इस्तेमाल करके, गेमप्ले में आगे-पीछे जाने की सुविधा देता है. हालांकि, ऐसा हो सकता है कि यह सुविधा AZERTY कीबोर्ड पर ठीक से काम न करे. इसकी वजह यह है कि 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 को KeyEvent.KEYCODE_S पर, और keyRight को 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 सेवा की जांच करने की ज़रूरत नहीं है.