Lo schermo del televisore presenta una serie di considerazioni che potrebbero essere una novità del gioco mobile sviluppatori. Queste aree includono le dimensioni, lo schema di controllo e il fatto che tutti i giocatori lo visualizzano contemporaneamente.
Display
I due aspetti principali da tenere presente durante lo sviluppo di giochi per lo schermo della TV sono progettare il gioco per l'orientamento orizzontale e supportare la latenza bassa.
Supportare la visualizzazione orizzontale
Una TV è sempre in posizione orizzontale: non puoi ruotarla e non è possibile impostare l'orientamento verticale. Progetta sempre i giochi per TV in modo che vengano visualizzati in modalità Orizzontale.
Modalità automatica a bassa latenza
Alcuni display possono eseguire la post-elaborazione della grafica. Questa post-elaborazione migliora la qualità delle immagini, ma può aumentare la latenza. I display più recenti che supportano HDMI 2.1 dispongono di una modalità di latenza automatica minima (ALLM), che riduce al minimo la latenza disattivando questa post-elaborazione. Per per ulteriori dettagli sull'ALLM, consulta Specifiche 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à automatica a bassa latenza o della modalità di gioco, se disponibile, richiedendo un'elaborazione post-produzione minima. Questo è particolarmente utile per le applicazioni di giochi e videoconferenze, in cui la bassa latenza è più importante dell'avere la grafica migliore possibile.
Per attivare o disattivare la post-elaborazione minima, richiama
Window.setPreferMinimalPostProcessing()
,
o imposta il valore
preferMinimalPostProcessing
a true
. Non tutti i display supportano una post-elaborazione minima. per scoprire se un
un determinato display lo supporta, chiama
Display.isMinimalPostProcessingSupported()
.
Dispositivi di immissione
Le TV non hanno interfacce touch, quindi è ancora più importante scegliere i controlli giusti e assicurarsi che i giocatori li trovino intuitivi e divertenti da usare. Gestione dei controller introduce anche altri problemi a cui prestare attenzione, come il monitoraggio di più e la gestione si disconnette normalmente. Tutte le app TV, inclusi i giochi, devono gestire i controller in modo coerente. Leggi l'articolo Gestire la TV per ulteriori informazioni sull'uso dei controller della TV e Gestisci i controller dei giochi per specifici giochi informazioni sull'uso dei controller TV per i giochi.
Layout tastiera
In Android 13 (livello API 33) e versioni successive, puoi determinare i layout di tastiera utilizzando
getKeyCodeForKeyLocation()
.
Ad esempio, il gioco supporta il movimento con i tasti WASD, ma potrebbe non funzionare correttamente
una tastiera AZERTY con i tasti A e W in posizioni diverse. Puoi ottenere i codici tasti
per i tasti che prevedi in determinate posizioni:
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) }
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
Esistono alcuni elementi speciali che i giochi devono includere nel file Android manifest.
Mostrare il gioco nella schermata Home
Nella schermata Home di Android TV le partite sono visualizzate in una riga separata rispetto alle normali app.
Per visualizzare il tuo gioco nell'elenco dei giochi, imposta il
android:isGame
a "true"
nel file manifest dell'app
<application>
il tag. Ad esempio:
<application ... android:isGame="true" ... >
Dichiara il supporto dei controller di gioco
I controller per i giochi potrebbero non essere disponibili o attivi per gli utenti di un dispositivo TV. Per poter Comunica agli utenti che il tuo gioco supporta un controller di gioco, devi includere la seguente voce nella del file manifest dell'app:
<uses-feature android:name="android.hardware.gamepad" android:required="false"/>
Nota: quando specifichi il supporto android:hardware:gamepad
, non impostare il valore
android:required
a "true"
. Se lo fai, gli utenti non potranno
installare l'app sui dispositivi TV.
Per ulteriori informazioni sulle voci manifest, consulta File 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 dovrebbe poter raggiungere obiettivi. Per ulteriori informazioni e su come implementarli, consulta l'articolo Obiettivi in Android.
Accedi
Il gioco dovrebbe tentare di far accedere l'utente al momento del lancio. Se il giocatore rifiuta di accedere più volte di seguito, il gioco dovrebbe smettere di chiederlo. Scopri di più sull'accesso in Implementazione dell'accesso su Android.
Salvataggio in corso…
Utilizza le partite salvate di Google Play Services per archiviare il tuo salvataggio. Il tuo gioco deve associare i salvataggi di gioco a un Account Google specifico, in modo da identificabile in modo univoco anche su più dispositivi: a prescindere dal fatto che il giocatore utilizzi uno smartphone o una TV, deve essere in grado di recuperare le informazioni sul salvataggio del gioco dallo stesso account utente.
Dovresti anche fornire un'opzione nell'interfaccia utente del gioco per consentire al giocatore di eliminare i contenuti localmente e
archiviati nel cloud. Potresti inserire l'opzione nella schermata Settings
del gioco. Per
specifiche sull'implementazione delle partite salvate tramite Play Services, consulta la sezione Giochi salvati in Android.
Esci
Fornisci un elemento dell'interfaccia utente coerente e ben visibile che consenta all'utente di uscire dal gioco in modo corretto. Questo dovrebbe essere accessibile con i pulsanti 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 sul web nei giochi per Android TV. Android TV non supporta un browser web.
Nota: puoi utilizzare il corso WebView
per accedere a
servizi di social media.
Reti
I giochi richiedono spesso una maggiore larghezza di banda per offrire prestazioni ottimali e molti utenti preferiscono la connessione ethernet al Wi-Fi per ottenere queste prestazioni. L'app dovrebbe verificare la presenza di connessioni Wi-Fi ed ethernet. Se la tua app è solo per TV, non devi verificare la presenza del servizio 3G/LTE come faresti per un'app mobile.