Sviluppa giochi per tutti gli schermi

Quando si sviluppa un gioco per Android, è importante prevedere la varietà possibili esperienze del giocatore e di rimanere adattivo in tempo reale esigenze di interazione. Supportando diverse esperienze dei giocatori, aumenti flessibilità del gameplay, aiutandoti ad ampliare la portata del tuo gioco.

Ecco alcune differenze specifiche nell'esperienza dei giocatori:

  • Fattori di forma dei dispositivi: sebbene gli smartphone offrano la tradizionale sull'esperienza del dispositivo, è possibile interagire con i giochi su altri fattori di forma. I dispositivi ChromeOS possono eseguire un contenitore Android che mostra il tuo gioco. Tablet che supportano Android su più livelli di fedeltà. Android TV i dispositivi supportano esperienze più immersive e ricche di dettagli. I giocatori possono simulare un ambiente multi-finestra utilizzando uno strumento di estensione per la pubblicità display. E quando usando i pieghevoli, i giocatori possono cambiare le dimensioni dello schermo durante un gameplay durante la sessione.
  • Metodi di interazione: i giocatori possono fornire input toccando lo schermo, ma possono anche usare mouse, touchpad, tastiera o controller . Inoltre, la disponibilità di strumenti di estensioni display e pieghevoli consente ai giocatori di sperimentare il gioco su uno schermo più grande, in modo da avere più tempo sessioni di gameplay e interfacce più complesse più fattibili.
  • Supporto hardware. Alcuni dispositivi Android non sono dotati di hardware più tipico in un dispositivo portatile, come una fotocamera posteriore, un GPS e e la connettività di rete. Il gioco deve adattarsi all'hardware disponibile per gestire agevolmente le situazioni in cui determinate funzionalità non sono disponibili.

Questa guida presenta le best practice relative allo sviluppo del tuo gioco per diversi tipi di schermate e interazioni degli utenti. Questa guida fornisce inoltre suggerimenti su progettando il tuo gioco e sviluppando una strategia di test efficace.

Best practice per la progettazione di giochi

Quando pianifichi la progettazione e l'architettura del tuo gioco, segui le best practice descritti nelle sezioni seguenti.

Rispondere manualmente alle modifiche alla configurazione

Quando il sistema Android rileva una modifica alla configurazione, ad esempio una modifica alle dimensioni dello schermo, orientamento o metodo di immissione, il sistema si riavvia per impostazione predefinita l'attività corrente. Per mantenere lo stato all'interno di un'app o di un gioco, l'attività per chiamate predefinite onSaveInstanceState() prima del riavvio onRestoreInstanceState() dopo il riavvio. Questo processo, tuttavia, richiede che l'attività ricarichi tutti e le risorse associate. Per scoprire di più su questo comportamento predefinito, consulta la guida alla gestione della configurazione modifiche.

Una tipica sessione di gameplay è soggetta a diverse modifiche alla configurazione. Se il tuo gioco permette al sistema di gestire ogni modifica alla configurazione, la scena del gioco viene distrutta e ripetere più volte, riducendo le prestazioni del gioco. Per questo motivo, ti consigliamo vivamente di gestire personalmente queste modifiche alla configurazione il tuo gioco.

Per scoprire come aggiungere questa logica di modifica della configurazione al tuo gioco, consulta le su come creare una modifica alla configurazione personalizzata e i gestori di rete.

Crea un'architettura flessibile

Per aggiungere il supporto del tuo gioco sul maggior numero possibile di dispositivi, segui queste indicazioni pratiche:

  • Implementa Android App Bundle anziché i singoli APK. App per Android I bundle consentono di creare pacchetti di artefatti di diversi e diversi modelli di architettura, come x86, ARM, artefatto. Inoltre, gli Android App Bundle supportano limiti di dimensione più elevati per il tuo gioco; ogni APK di base può avere dimensioni massime di 150 MB e il bundle stesso può di gigabyte.
  • Aggiungi il supporto per le architetture x86. Questo passaggio migliora la qualità le prestazioni su dispositivi che non supportano ARM, perché ora questi dispositivi eseguire le istruzioni senza prima tradurle.

Aggiungi il supporto per Vulkan

Se supporti Vulkan, il tuo gioco può raggiungere risultati migliori le prestazioni grafiche. La maggior parte dei dispositivi supporta questa API grafica.

Creare gestori personalizzati delle modifiche alla configurazione

Per dichiarare i tipi di modifiche alla configurazione che il gioco gestisce, aggiungi android:configChanges a ogni elemento <activity> nel manifest che rappresenta una schermata o complessa.

Il seguente snippet di codice mostra come dichiarare che il tuo gioco è tenuto delle modifiche relative a dimensioni e orientamento dello schermo e metodo di immissione:

<activity ...
    android:configChanges="screenSize|orientation|keyboard|keyboardHidden">
</activity>

Quando si verificano le modifiche alla configurazione dichiarate, il sistema ora richiama un un metodo diverso, onConfigurationChanged() In questo metodo, aggiungi la logica per aggiornare l'UI del gioco:

  • Aggiorna il fattore di scala e l'orientamento dello schermo. Tieni presente che prestazioni, a volte è meglio scalare l'UI del gioco solo 1 dimensione.
  • Identifica il metodo di inserimento ottimale per il player.

Gestire le modifiche alla configurazione dello schermo

Il gioco gestisce le dimensioni e l'orientamento dello schermo manualmente ogni volta includi i valori screenSize e orientation, rispettivamente, in una android:configChanges: . Puoi usare questi nuovi valori per aggiornare i contenuti della scena aree di input del player. Per indicazioni su come progettare il layout del tuo gioco aggiornamento più facile, consulta la guida relativa al supporto di schermi diversi dimensioni.

Nell'implementazione di onConfigurationChanged() nel tuo gioco, utilizza il pass-in Configuration e l'oggetto l'oggetto Display di window manager determinare i valori aggiornati per le dimensioni e l'orientamento dello schermo; rispettivamente.

Il seguente snippet di codice mostra come ottenere le dimensioni dello schermo aggiornate del tuo gioco e orientamento:

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()

    // Get general orientation; either Configuration.ORIENTATION_PORTRAIT or
    // Configuration.ORIENTATION_LANDSCAPE.
    val newScreenOrientation: Int = newConfig.orientation

    // Get general rotation; one of: 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);

    // Get general orientation; either Configuration.ORIENTATION_PORTRAIT or
    // Configuration.ORIENTATION_LANDSCAPE.
    int newScreenOrientation = newConfig.orientation;

    // Get general rotation; one of: ROTATION_0, ROTATION_90, ROTATION_180,
    // or ROTATION_270.
    int newScreenRotation = getWindowManager().getDefaultDisplay()
            .getRotation();
}

Tieni presente che cambiare la posa di un dispositivo pieghevole cambia la configurazione, anche se l'app viene eseguita in modalità a schermo intero. Di conseguenza, l'app potrebbe dover gestire le modifiche alle dimensioni dello schermo o ai pixel densità se l'utente apre o piega il dispositivo mentre è in esecuzione il gioco.

Qualità dello schermo specifiche per i giochi

Le sezioni seguenti descrivono come regolare la reazione del gioco allo schermo le dimensioni o l'orientamento dello schermo cambiano in base alle qualità del gioco:

Modalità a schermo intero

Su alcune piattaforme, come ChromeOS, le app e i giochi per Android possono essere visualizzati con finestre ridimensionabili per impostazione predefinita. Se il gioco viene sempre eseguito in modalità a schermo intero, puoi impostare android:resizeableActivity a false in uno degli elementi <activity>, come mostrato in seguente snippet di codice:

<activity ...
    android:resizeableActivity="false">
</activity>

Puoi anche impostare l'attributo android:resizeableActivity su false per evitare alla configurazione basata sulle dimensioni. Tuttavia, a meno che il gioco non venga sempre eseguito in modalità a schermo intero, dovresti aggiungere questo attributo solo come correzione temporanea a scopo di test.

Orientamento schermo

Se il gioco dipende da sensori di un dispositivo con un orientamento specifico, specifica un valore per android:screenOrientation pollici l'attività del gioco, come mostrato nel seguente snippet di codice. Questa impostazione consente per evitare che una scena nel gioco si capovolga inaspettatamente.

<activity ...
    android:screenOrientation="landscape">
</activity>

Qualità dello schermo specifiche per dispositivo

Le seguenti sezioni descrivono come gestire le modifiche alla configurazione basata sullo schermo date le qualità specifiche di alcuni dispositivi.

Proporzioni

Alcuni dispositivi supportano proporzioni diverse. Ad esempio, i dispositivi pieghevoli progettato per supportare proporzioni di 21:9 quando lo stato è piegato. Per gestire questa potenziale varietà nelle proporzioni, esegui almeno una delle seguenti operazioni:

  • Scegli come target Android 8.0 (livello API 26) o versioni successive.
  • Rendi ridimensionabili la scena e l'interfaccia del tuo gioco. Imposta android:resizeableActivity a true su dispositivi con Android 7.0 (livello API 24) e versioni successive.
  • Dichiara le proporzioni massime supportate. In un Attributo <meta-data> associato con il tuo gioco, imposta android.max_aspect su 2.4, come mostrato di seguito snippet di codice. Tuttavia, tieni presente che le proporzioni sono più grandi di quella che hai specificato fa sì che il gioco venga visualizzato letterbox all'interno di un display.

    <application>
    <meta-data android:name="android.max_aspect"
               android:value="2.4" />
    </application>
    

Più attività visibili contemporaneamente

Molti dispositivi moderni supportano diversi layout di schermo, tra cui schermo diviso, Picture in picture e ampie aree di visualizzazione. Quando usi uno di questi layout, il sistema può rendere visibili più attività contemporaneamente.

Sui dispositivi con Android 9 (livello API 28) o versioni successive, è possibile attività visibili da riprendere contemporaneamente. Affinché questo comportamento funziona, ma sia il tuo gioco che l'OEM del dispositivo devono attivare funzionalità. Puoi aggiungere supporto all'interno del gioco impostando Da android.allow_multiple_resumed_activities a true nel file manifest del tuo gioco, come mostrato nel seguente snippet:

<application>
    <meta-data android:name="android.allow_multiple_resumed_activities"
               android:value="true" />
</application>

Puoi quindi testare il gioco su diversi dispositivi per vedere quale offre il supporto OEM necessario per il corretto funzionamento del ripristino multiplo.

Per ulteriori informazioni su come configurare il tuo gioco in modo che venga visualizzato come parte di un visualizzazione multi-finestra, consulta la guida su come aggiungere la modalità multi-finestra assistenza.

Gestire diversi tipi di modelli di interazione

Il gioco gestisce la presenza sulla tastiera e la disponibilità della tastiera manualmente in qualsiasi momento includi i valori keyboard e keyboardHidden, rispettivamente, in una android:configChanges: . Puoi usare questi nuovi valori per aggiornare l'input principale del tuo gioco .

Quando configuri il gioco per supportare più tipi di input utente, mantieni tieni presente quanto segue:

  • Rileva i metodi di immissione anziché i singoli dispositivi. Questa mentalità rende è più facile migliorare l'esperienza dei giocatori senza concentrarsi troppo sul dispositivo specifico che il player potrebbe avere.
  • Includi l'attributo keyboardHidden nell'elenco di account gestiti manualmente modifiche alla configurazione. In questo modo, il gioco può tenere traccia di quando una tastiera è fisicamente collegato al dispositivo, ma inutilizzabile.
  • Determina i metodi di immissione attualmente disponibili. A questo scopo, chiama getInputDeviceIds() all'avvio del gioco e dopo ogni modifica alla configurazione.

    Spesso puoi determinare in che modo il giocatore intende interagire con il tuo gioco. in base al dispositivo di input preferito:

    • I giocatori in genere usano una tastiera o un controller di gioco per eseguire rapide sequenze di pulsanti.
    • I giocatori in genere usano un touchscreen o un touchpad per svolgere operazioni più complesse gesti.
    • In genere i giocatori utilizzano il mouse per inserire input con una precisione superiore.
    di Gemini Advanced.

Le seguenti sezioni forniscono le best practice per tipi specifici di input dispositivi mobili.

Tastiera

Quando crei un layout di tastiera per il tuo gioco, considera la modalità di navigazione del giocatore di una determinata scena e del modo in cui interagiscono con le impostazioni del gioco.

I tasti WASD o i tasti freccia sono in genere i migliori per controllare il movimento dei caratteri. È inoltre preferibile assegnare una chiave particolare per ogni azione o competenza importante eseguibili da un personaggio controllabile all'interno del tuo gioco. Per massimizzare ti consigliamo di aggiungere il supporto per associazioni di tasti personalizzate nel gioco.

I giocatori devono anche essere in grado di aprire i menu del gioco e sfogliarli usando la tastiera. La chiave Esc è una mappatura comune per mettere in pausa una scena e che mostra il menu del gioco.

Per ulteriori informazioni sul supporto dell'immissione da tastiera nel tuo gioco, consulta la guida su come supportare la navigazione da tastiera come nonché la guida alla gestione della tastiera azioni.

Controller di gioco

Per ulteriori informazioni su come gestire l'input del controller nel tuo gioco, consulta la guida su come supportare i controller di gioco.

Mouse o touchpad

Se il tuo gioco supporta l'input del giocatore tramite mouse o touchpad, tieni presente che i giocatori interagiscono con il dispositivo in modi diversi dal gioco. È tieni presente che, richiedendo l'acquisizione del puntatore, tutto l'input del mouse viene indirizzato al tuo gioco. Pertanto, una volta che il gioco ha le informazioni necessarie, l'acquisizione del puntatore di rilascio in modo che i giocatori riprendano il controllo standard del mouse dispositivo.

Sui dispositivi con Android 8.0 (livello API 26) e versioni successive, puoi usare il pulsante API Capture per facilitare il processo di acquisizione del puntatore. Nei giochi con reazioni ad alta precisione, puoi ottenere le coordinate correnti del puntatore richiamando getX() e getY() metodi.

Per ulteriori informazioni sull'aggiunta del supporto per l'input con il mouse e l'input tramite touchpad nel tuo gioco, consulta la guida su come monitorare tocco e puntatore movimenti, nonché la guida su come gestire gesti multi-touch.

Testare il gioco

Prima di lanciare il gioco, verifica in che modo risponde alle modifiche alla configurazione completando i passaggi descritti nelle sezioni seguenti.

Aggiorna il piano di test

Durante la convalida della funzionalità del tuo gioco, includi i seguenti scenari di test:

  • Riduci a icona e ingrandisci la finestra contenente il gioco. (Non si applica se è sempre in modalità a schermo intero.
  • Modifica le dimensioni dello schermo.
  • Modifica l'orientamento dello schermo. Non si applica se il gioco ha un fisso orientamento.)
  • Consente di collegare e scollegare dispositivi di input, come tastiere e mouse.
  • Esegui più riprese, se il gioco lo supporta.

Valuta anche l'aggiornamento del sistema di controllo qualità del gioco per ottimizzare per una più vasta gamma di esperienze dei giocatori.

Per le best practice relative al test del tuo gioco, consulta la sezione Concetti fondamentali di Guida ai test.

Utilizzare gli strumenti di test e debug

Puoi eseguire i test utilizzando una serie di strumenti supportati dalla piattaforma: