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
atrue
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, impostaandroid.max_aspect
su2.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.
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:
Emulatori, tra cui l'emulatore Android e Firebase Test Lab
Prestazioni di ChromeOS Strumento di analisi, disponibile con ChromeOS M75 o versioni successive.