बड़ी स्क्रीन के साइज़ में बदलाव करने की सुविधा मिलती है

फ़ोन के अलावा, बड़ी स्क्रीन वाले अलग-अलग डिवाइसों पर गेम उपलब्ध कराने से, यह तय करना ज़रूरी हो जाता है कि आपका गेम विंडो को कैसे मैनेज करता है. Googlebook, ChromeOS, और Google Play Games on PC पर, आपका गेम मुख्य डेस्कटॉप इंटरफ़ेस पर विंडो मोड में चल सकता है. Android 12L (एपीआई लेवल 32) या इसके बाद के वर्शन पर काम करने वाले नए Android टैबलेट और फ़ोल्ड किए जा सकने वाले डिवाइसों पर, आपका गेम अन्य ऐप्लिकेशन के साथ स्प्लिट-स्क्रीन मोड में साइड-बाय-साइड चल सकता है. साथ ही, इसका साइज़ बदला जा सकता है. इसके अलावा, इसे फ़ोल्ड किए जा सकने वाले डिवाइसों की इनर और आउटर डिसप्ले के बीच ले जाया जा सकता है. इससे विंडो के साइज़ और कुछ डिवाइसों पर ओरिएंटेशन में बदलाव होता है.

Unity गेम के साथ साइज़ बदलने की सुविधा

बड़ी स्क्रीन के लिए बुनियादी कॉन्फ़िगरेशन

यह बताएं कि आपके गेम को छोटा-बड़ा किया जा सकता है या नहीं:

<android:resizeableActivity="true" or "false" />

अगर गेम का साइज़ बदलने की सुविधा काम नहीं करती है, तो पक्का करें कि गेम के मेनिफ़ेस्ट में, कम से कम और ज़्यादा से ज़्यादा आसपेक्ट रेशियो (लंबाई-चौड़ाई का अनुपात) के बारे में साफ़ तौर पर बताया गया हो:

<!-- Render full screen between 3:2 and 21:9 aspect ratio -->
<!-- Let the platform letterbox otherwise -->
<activity android:minAspectRatio="1.5">
<activity android:maxAspectRatio="2.33">

Google Play Games on PC

Google Play Games on PC के लिए, प्लैटफ़ॉर्म, विंडो के साइज़ को बदलने की सुविधा को मैनेज करता है. साथ ही, तय किए गए आसपेक्ट रेशियो का पालन करता है. विंडो का साइज़, अपने-आप ऑप्टिमाइज़ हो जाता है. अगर आपके गेम का मुख्य ओरिएंटेशन लैंडस्केप है, तो आपको कम से कम 16:9 आसपेक्ट रेशियो (लंबाई-चौड़ाई का अनुपात) का इस्तेमाल करना होगा. वहीं, अगर आपका गेम पोर्ट्रेट मोड में है, तो आपको 9:16 आसपेक्ट रेशियो का इस्तेमाल करना होगा. बेहतरीन अनुभव पाने के लिए, लैंडस्केप गेम के लिए 21:9, 16:10, और 3:2 आसपेक्ट रेशियो (लंबाई-चौड़ाई का अनुपात) का इस्तेमाल करें. यहां विंडो का साइज़ बदलने की सुविधा ज़रूरी नहीं है. हालांकि, अन्य डिवाइसों के साथ काम करने के लिए, यह सुविधा होना अच्छा है.

ज़्यादा जानकारी और सबसे सही तरीकों के लिए, Google Play Games on PC के लिए ग्राफ़िक कॉन्फ़िगर करना लेख पढ़ें.

बड़ी स्क्रीन

बड़ी स्क्रीन वाले टैबलेट, फ़ोल्ड किए जा सकने वाले डिवाइस, Googlebook, ChromeOS, और कनेक्ट किए गए डिसप्ले पर, अपने गेम को पूरी स्क्रीन पर दिखाने के लिए, पूरी स्क्रीन पर दिखने वाले इमर्सिव मोड का इस्तेमाल करें. साथ ही, decorView, सिस्टम यूज़र इंटरफ़ेस (यूआई) की दृश्यता या WindowInsetsCompat एपीआई पर फ़्लैग सेट करके, सिस्टम बार छिपाएं. आपको रोटेशन और साइज़ बदलने से जुड़े कॉन्फ़िगरेशन इवेंट को भी आसानी से मैनेज करना होगा या उन्हें होने से रोकना होगा.

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

पहली इमेज. कॉन्फ़िगरेशन की ज़रूरी शर्तें पूरी करने से जुड़ा डायलॉग बॉक्स.

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

बड़ी स्क्रीन पर ऐप्लिकेशन को अपने हिसाब से छोटा-बड़ा करने की ऐडवांस सुविधा

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

कंपैटिबिलिटी मोड से बाहर निकलने और गतिविधि को फिर से बनाने से बचने के लिए, यह तरीका अपनाएं:

  1. अपनी मुख्य ऐक्टिविटी को फिर से साइज़ बदलने की सुविधा के तौर पर एलान करें:

    <android:resizeableActivity="true" />
    
  2. बड़ी स्क्रीन के सभी स्क्रीन कॉन्फ़िगरेशन इवेंट पाने के लिए, अपने गेम के मेनिफ़ेस्ट के <activity> एलिमेंट के android:configChanges एट्रिब्यूट में, "orientation", "screenSize", "smallestScreenSize", "screenLayout", और "density" के लिए साफ़ तौर पर सहायता का एलान करें:

    <android:configChanges="screenSize | smallestScreenSize | screenLayout | orientation | keyboard |
                            keyboardHidden | density" />
    
  3. onConfigurationChanged() को बदलें और कॉन्फ़िगरेशन इवेंट को मैनेज करें. इसमें मौजूदा ओरिएंटेशन, विंडो का साइज़, चौड़ाई, और ऊंचाई शामिल है:

    Kotlin

    override fun onConfigurationChanged(newConfig: Configuration) {
       super.onConfigurationChanged(newConfig)
       val density: Float = resources.displayMetrics.density
       val newScreenWidthPixels =
    (newConfig.screenWidthDp * density).toInt()
       val newScreenHeightPixels =
    (newConfig.screenHeightDp * density).toInt()
    
       // Configuration.ORIENTATION_PORTRAIT or ORIENTATION_LANDSCAPE
       val newScreenOrientation: Int = newConfig.orientation
    
       // ROTATION_0, ROTATION_90, ROTATION_180, or ROTATION_270
       val newScreenRotation: Int =
    windowManager.defaultDisplay.rotation
    }

    Java

    @Override
    public void onConfigurationChanged(Configuration newConfig) {
       super.onConfigurationChanged(newConfig);
       float density = getResources().getDisplayMetrics().density;
       int newScreenWidthPixels = (int) (newConfig.screenWidthDp * density);
       int newScreenHeightPixels = (int) (newConfig.screenHeightDp * density);
    
       // Configuration.ORIENTATION_PORTRAIT or ORIENTATION_LANDSCAPE
       int newScreenOrientation = newConfig.orientation;
    
       // ROTATION_0, ROTATION_90, ROTATION_180, or ROTATION_270
       int newScreenRotation = getWindowManager().getDefaultDisplay()
               .getRotation();
    }

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

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

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

मल्टी-विंडो (एक से ज़्यादा ऐप, एक साथ) मोड

मल्टी-विंडो मोड की मदद से, एक ही स्क्रीन पर एक साथ कई ऐप्लिकेशन इस्तेमाल किए जा सकते हैं. मल्टी-विंडो मोड से, ऐक्टिविटी के लाइफ़साइकल में कोई बदलाव नहीं होता. हालांकि, Android के अलग-अलग वर्शन पर, मल्टी-विंडो मोड में ऐप्लिकेशन की 'फिर से शुरू की गई' स्थिति अलग-अलग होती है. इसके बारे में जानने के लिए, मल्टी-विंडो मोड की सुविधा के साथ काम करने वाले ऐप्लिकेशन में मल्टी-विंडो मोड में ऐक्टिविटी का लाइफ़साइकल देखें.

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

इस बात की कोई गारंटी नहीं है कि मल्टी‑विंडो मोड में ऐप्लिकेशन को वापस फ़ोकस किया जाएगा. इसलिए, अगर गेम को रोकने के लिए ऐप्लिकेशन की स्थिति से जुड़े किसी इवेंट का इस्तेमाल किया जाता है, तो गेम को फिर से शुरू करने के लिए, फ़ोकस हासिल करने वाले इवेंट (onWindowFocusChanged() के साथ फ़ोकस की वैल्यू के तौर पर सही) पर भरोसा न करें. इसके बजाय, अन्य इवेंट हैंडलर या स्टेट चेंज हैंडलर का इस्तेमाल करें. जैसे, onConfigurationChanged() या onResume(). ध्यान दें कि मौजूदा गतिविधि, मल्टी-विंडो मोड में चल रही है या नहीं, इसका पता लगाने के लिए isInMultiWindowMode() तरीके का इस्तेमाल कभी भी किया जा सकता है.

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

पहले विकल्प में, Android मेनिफ़ेस्ट में मौजूद <layout> टैग पर कुछ एट्रिब्यूट का इस्तेमाल किया जाता है. defaultHeight और defaultWidth एट्रिब्यूट से, शुरुआती डाइमेंशन को कंट्रोल किया जाता है. minHeight और minWidth एट्रिब्यूट का भी ध्यान रखें, ताकि आपके गेम के खिलाड़ी गेम विंडो का साइज़ ऐसे डाइमेंशन में न बदल पाएं जो आपके गेम के साथ काम नहीं करते. आखिर में, gravity एट्रिब्यूट होता है. इससे यह तय होता है कि लॉन्च होने पर विंडो, स्क्रीन पर कहां दिखेगी. इन एट्रिब्यूट का इस्तेमाल करके बनाए गए लेआउट टैग का उदाहरण यहां दिया गया है:

<layout android:defaultHeight="500dp"
        android:defaultWidth="600dp"
        android:gravity="top|end"
        android:minHeight="450dp"
        android:minWidth="300dp" />

विंडो का साइज़ सेट करने का दूसरा विकल्प, डाइनैमिक लॉन्च बाउंड का इस्तेमाल करके काम करता है. setLaunchBounds(Rect)⁠⁠ का इस्तेमाल करके, शुरुआती विंडो के डाइमेंशन तय किए जा सकते हैं. अगर कोई खाली आयत तय की जाती है, तो गतिविधि को ज़्यादा से ज़्यादा स्थिति में शुरू किया जाता है.

इसके अलावा, अगर Unity या Unreal गेम इंजन का इस्तेमाल किया जा रहा है, तो पक्का करें कि आपके पास इनका नया वर्शन (Unity 2019.4.40 और Unreal 5.3 या इसके बाद का वर्शन) हो. इससे मल्टी-विंडो मोड को बेहतर तरीके से इस्तेमाल किया जा सकेगा.

फ़ोल्ड किए जा सकने वाले डिवाइस के लिए, डिवाइस को सही तरीके से रखने की सुविधा

खिलाड़ियों की दिलचस्पी बढ़ाने और उन्हें गेम में बनाए रखने के लिए, Jetpack WindowManager लेआउट लाइब्रेरी का इस्तेमाल करें. इससे, फ़ोल्ड किए जा सकने वाले डिवाइसों के लिए टेबलटॉप जैसे मोड उपलब्ध कराए जा सकते हैं:

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

Kotlin

fun isTableTopPosture(foldFeature : FoldingFeature?) : Boolean {
    contract { returns(true) implies (foldFeature != null) }
    return foldFeature?.state == FoldingFeature.State.HALF_OPENED &&
            foldFeature.orientation == FoldingFeature.Orientation.HORIZONTAL
}

Java

boolean isTableTopPosture(FoldingFeature foldFeature) {
    return (foldFeature != null) &&
           (foldFeature.getState() == FoldingFeature.State.HALF_OPENED) &&
           (foldFeature.getOrientation() == FoldingFeature.Orientation.HORIZONTAL);
}