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

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

डिसप्ले

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

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

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

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

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