Crea giochi per la TV

Lo schermo della TV presenta una serie di considerazioni che potrebbero essere nuove per gli sviluppatori di giochi mobile. Queste aree includono le dimensioni dello schermo, lo schema di controllo e il fatto che tutti i giocatori lo visualizzano contemporaneamente.

Display

I due aspetti principali da tenere presente quando sviluppi giochi per lo schermo della TV sono la progettazione del gioco per l'orientamento orizzontale e la fornitura di supporto per la bassa latenza.

Supporto del display orizzontale

La TV è sempre in orizzontale: non puoi ruotarla e non esiste l'orientamento verticale. Progetta sempre i tuoi giochi per la TV in modo che vengano visualizzati in modalità Orizzontale.

Modalità a bassa latenza automatica

Alcuni display possono eseguire la post-elaborazione della grafica. Questa post-elaborazione migliora la qualità della grafica, ma può aumentare la latenza. I display più recenti che supportano HDMI 2.1 hanno una modalità a bassa latenza automatica (ALLM), che riduce al minimo la latenza disattivando questa 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à di gioco, se disponibile, richiedendo la post-elaborazione minima. Questo è particolarmente utile per le applicazioni di gioco e videoconferenza, in cui una 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 determinato display la supporta, chiama il metodo Display.isMinimalPostProcessingSupported().

Dispositivi di immissione

Le TV non hanno interfacce touch, quindi è ancora più importante che i controlli siano corretti e che i giocatori li trovino intuitivi e divertenti da usare. La gestione dei controller introduce anche altri problemi a cui prestare attenzione, come il monitoraggio di più controller e la gestione corretta delle 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 Gestisci i controller TV e Gestisci i controller per i giochi per informazioni specifiche sull'utilizzo 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 tuo gioco supporta il movimento utilizzando 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 rispettivamente su KeyEvent.KEYCODE_S e KeyEvent.KEYCODE_D. Ora puoi creare gestori di eventi chiave per questi codici chiave e implementare il comportamento previsto.

Manifest

Ci sono alcuni elementi speciali che i giochi devono includere nel manifest Android.

Mostra il gioco nella schermata Home

La schermata Home di Android TV mostra i giochi in una riga separata dalle app normali. Per fare in modo che il tuo gioco venga visualizzato nell'elenco dei giochi, imposta l'attributo android:isGame su "true" nel tag <application> del 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, imposta l'attributo android:required su "false" se il tuo gioco può essere utilizzato anche con un telecomando TV standard (D-pad). Imposta android:required su "true" solo se è necessario un controller per giocare. L'impostazione android:required="true" mostra un badge "Gamepad richiesto" e un avviso di preinstallazione su Google Play per Android TV, anziché bloccare l'installazione sui dispositivi TV.

Per saperne di più sulle voci del manifest, consulta 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 partite salvate.

Obiettivi

Il gioco deve includere almeno cinque obiettivi (ottenibili). Solo un utente che controlla il gameplay da un dispositivo di input supportato deve poter ottenere obiettivi. Per saperne di più sugli obiettivi e su come implementarli, consulta 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 dovrebbe smettere di chiederlo. Scopri di più sull'accesso nella pagina Implementazione dell'accesso su Android.

Salvataggio in corso…

Utilizza le Partite salvate di Google Play Services per archiviare i salvataggi 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 telefono o una TV, il gioco deve essere in grado di estrarre le informazioni sui salvataggi dallo stesso account utente.

Dovresti 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 ed evidente che consenta all'utente di uscire dal gioco senza problemi. Questo elemento deve essere accessibile con i pulsanti di navigazione del D-pad. In questo modo, non dovrai fare affidamento sul pulsante Home per fornire un'uscita, poiché non è coerente né affidabile tra i 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 gli accessi ai servizi di social media.

Networking

I giochi richiedono spesso una larghezza di banda maggiore per fornire prestazioni ottimali e molti utenti preferiscono Ethernet al Wi-Fi per ottenere queste prestazioni. L'app deve verificare la presenza di connessioni Wi-Fi ed Ethernet. Se la tua app è solo per la TV, non è necessario verificare la presenza del servizio 3G/LTE come faresti per un'app mobile.