Lo schermo della televisione presenta una serie di considerazioni che potrebbero essere nuove per gli sviluppatori di giochi per dispositivi mobili. Queste aree includono le grandi dimensioni, lo schema di controllo e il fatto che tutti i giocatori lo visualizzano contemporaneamente.
Visualizzazione
I due aspetti principali da tenere a mente quando sviluppi giochi per lo schermo della TV sono la progettazione del gioco per l'orientamento orizzontale e il supporto della bassa latenza.
Supporto del display orizzontale
Una TV è sempre orizzontale: non puoi ruotarla e non esiste l'orientamento verticale. Progetta sempre i tuoi giochi TV in modo che vengano visualizzati in modalità Orizzontale.
Modalità a bassa latenza automatica
Alcuni display possono eseguire la post-elaborazione grafica. Questo post-processing migliora la qualità della grafica, ma può aumentare la latenza. I display più recenti che supportano HDMI 2.1 hanno una modalità automatica a bassa latenza (ALLM), che riduce al minimo la latenza disattivando la post-elaborazione. Per maggiori dettagli su ALLM, consulta la specifica HDMI 2.1. Altri display potrebbero supportare una modalità di gioco con un comportamento simile.
In Android 11 e versioni successive, una finestra può richiedere l'utilizzo della modalità a bassa latenza automatica o della modalità gioco, se disponibile, richiedendo post-elaborazione minima. Ciò è particolarmente utile per le applicazioni di gioco e videoconferenza, in cui la bassa latenza è più importante di avere la migliore grafica possibile.
Per attivare o disattivare la post-elaborazione minima, chiama
Window.setPreferMinimalPostProcessing()
,
o imposta l'attributo
preferMinimalPostProcessing
della finestra su true
. Non tutti i display supportano la post-elaborazione minima. Per scoprire se un
display specifico la supporta, chiama il metodo
Display.isMinimalPostProcessingSupported()
.
Dispositivi di immissione
Le TV non hanno interfacce touch, quindi è ancora più importante impostare correttamente i controlli e assicurarsi che i giocatori li trovino intuitivi e divertenti da usare. La gestione dei controller introduce anche altri problemi a cui prestare attenzione, come tenere traccia di più controller e gestire correttamente le disconnessioni. Tutte le app TV, inclusi i giochi, devono gestire i controller in modo coerente. Per saperne di più sull'utilizzo dei controller TV, leggi Gestire i controller TV e per informazioni specifiche sull'utilizzo dei controller TV per i giochi, consulta Gestire i controller per i giochi.
Layout tastiera
In Android 13 (livello API 33) e versioni successive, puoi determinare i layout della tastiera utilizzando
getKeyCodeForKeyLocation()
.
Ad esempio, il tuo gioco supporta il movimento tramite i tasti WASD, ma questo potrebbe non funzionare correttamente su
una tastiera AZERTY che ha i tasti A e W in posizioni diverse. Puoi ottenere i codici tasto
per i tasti che ti aspetti in determinate posizioni:
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); }
In questo esempio, con una tastiera AZERTY, keyUp
è impostato su
KeyEvent.KEYCODE_Z
, keyLeft
è impostato su KeyEvent.KEYCODE_Q
,
mentre keyDown
e keyRight
sono impostati su KeyEvent.KEYCODE_S
e KeyEvent.KEYCODE_D
rispettivamente. Ora puoi creare gestori di eventi chiave per questi
codici chiave e implementare il comportamento previsto.
Manifest
I giochi devono includere alcune cose speciali nel manifest Android.
Mostrare il gioco nella schermata Home
Nella schermata Home di Android TV, i giochi vengono visualizzati in una riga separata dalle app normali.
Per visualizzare il tuo gioco nell'elenco dei giochi, imposta l'attributo
android:isGame
su "true"
nel tag
<application>
del file manifest dell'app. Ad esempio:
<application ... android:isGame="true" ... >
Dichiarare il supporto dei controller di gioco
I controller di gioco potrebbero non essere disponibili o attivi per gli utenti di un dispositivo TV. Per informare correttamente gli utenti che il tuo gioco supporta un controller di gioco, devi includere la seguente voce nel manifest dell'app:
<uses-feature android:name="android.hardware.gamepad" android:required="false"/>
Nota:quando specifichi il supporto di android:hardware:gamepad
, non impostare l'attributo
android:required
su "true"
. Se lo fai, gli utenti non potranno
installare la tua app sui dispositivi TV.
Per saperne di più sulle voci del manifest, vedi Manifest dell'app.
Servizi per i giochi di Google Play
Se il tuo gioco integra i servizi per i giochi di Google Play, devi tenere presente una serie di considerazioni relative a obiettivi, accesso e salvataggio dei giochi.
Obiettivi
Il tuo gioco deve includere almeno cinque obiettivi (ottenibili). Solo un utente che controlla il gameplay da un dispositivo di input supportato può ottenere obiettivi. Per saperne di più sugli obiettivi e su come implementarli, consulta la sezione Obiettivi in Android.
Accedi
Il gioco deve tentare di far accedere l'utente all'avvio. Se il giocatore rifiuta l'accesso più volte di seguito, il gioco non deve più chiederlo. Scopri di più sull'accesso in Implementazione dell'accesso su Android.
Salvataggio in corso…
Utilizza Partite salvate di Google Play Services per archiviare il salvataggio del gioco. Il gioco deve associare i salvataggi a un Account Google specifico, in modo da essere identificabile in modo univoco anche su più dispositivi: indipendentemente dal fatto che il giocatore utilizzi un cellulare o una TV, il gioco deve essere in grado di recuperare le informazioni di salvataggio dallo stesso account utente.
Devi anche fornire un'opzione nell'interfaccia utente del gioco per consentire al giocatore di eliminare i dati archiviati localmente e nel cloud. Potresti inserire l'opzione nella schermata Settings
del gioco. Per
informazioni specifiche sull'implementazione delle partite salvate utilizzando Play Services, consulta Partite salvate in Android.
Esci
Fornisci un elemento UI coerente e ovvio che consenta all'utente di uscire dal gioco in modo controllato. Questo elemento deve essere accessibile con i tasti di navigazione del D-pad. Esegui questa operazione anziché fare affidamento sul pulsante Home per uscire, in quanto non è coerente né affidabile su diversi controller.
Web
Non attivare la navigazione web nei giochi per Android TV. Android TV non supporta un browser web.
Nota:puoi utilizzare la classe WebView
per accedere ai servizi di social media.
Reti
I giochi spesso richiedono una larghezza di banda maggiore per offrire prestazioni ottimali e molti utenti preferiscono Ethernet al Wi-Fi per ottenere queste prestazioni. L'app dovrebbe controllare le connessioni Wi-Fi ed Ethernet. Se la tua app è solo per la TV, non devi controllare il servizio 3G/LTE come faresti per un'app mobile.