Crea giochi per la TV

Lo schermo del televisore presenta una serie di considerazioni che potrebbero essere una novità del gioco mobile sviluppatori. Queste aree includono le grandi dimensioni, lo schema di controllo e il fatto che tutti i soggetti lo stanno visualizzando contemporaneamente.

Display

Le due cose principali da tenere a mente durante lo sviluppo di giochi per lo schermo TV sono la progettazione per un orientamento orizzontale e supportare una bassa latenza.

Assistenza per la visualizzazione orizzontale

Una TV è sempre ruotata: non può essere ruotata e l'orientamento verticale è assente. Progetta sempre i tuoi giochi TV da visualizzare in modalità Orizzontale.

Modalità automatica a bassa latenza

Alcuni display possono eseguire la post-elaborazione della grafica. Questa post-elaborazione migliora la grafica ma può aumentare la latenza. I display più recenti che supportano la tecnologia HDMI 2.1 dispongono della minima automatica modalità latenza (ALLM), che riduce al minimo la latenza disattivando questa post-elaborazione. Per per ulteriori dettagli sull'ALLM, consulta Specifiche HDMI 2.1. Altro i display potrebbero supportare una modalità di gioco con comportamento simile.

In Android 11 e versioni successive, una finestra può richiedere la modalità a bassa latenza automatica o il gioco automatica, se disponibile, richiedendo una post-elaborazione minima. Questo è in particolare utile per le applicazioni di giochi e videoconferenze, dove la bassa latenza è più importante rispetto con la migliore grafica 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 usare i controlli correttamente e che i giocatori le trovino intuitive 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 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 chiave per i tasti previsti 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 i codici chiave e implementare il comportamento previsto.

Manifest

Ci sono alcune cose speciali che i giochi dovrebbero includere nel file manifest di Android.

Mostra 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 di 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 considerazioni relative a obiettivi, accesso e salvataggio dei giochi.

Obiettivi

Il 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 eseguire l'accesso dell'utente all'avvio. Se il giocatore rifiuta l'accesso volte di fila, il gioco dovrebbe smettere di chiedere. Per ulteriori informazioni sull'accesso, vedi Implementare l'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 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

Fornire un elemento UI coerente e evidente che consenta all'utente di uscire dal gioco agevolmente. Questo dovrebbe essere accessibile con i pulsanti di navigazione del D-pad. Esegui questa operazione invece di affidarti Pulsante Home per fornire un'uscita, poiché non è coerente né affidabile tra i 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 spesso richiedono una maggiore larghezza di banda per offrire prestazioni ottimali e molti utenti preferiscono da Ethernet a Wi-Fi per fornire queste prestazioni. L'app dovrebbe controllare la rete Wi-Fi e la rete Ethernet e connessioni a Internet. Se la tua app è solo per la TV, non è necessario controllare il servizio 3G/LTE come faresti per un'app mobile.