Crea giochi per la TV

Lo schermo della TV presenta una serie di aspetti che potrebbero essere nuovi per gli sviluppatori di giochi per dispositivi mobili. 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 in considerazione durante lo sviluppo di giochi per lo schermo della TV sono progettare il gioco per l'orientamento orizzontale e supportare una latenza ridotta.

Supportare la visualizzazione orizzontale

Una TV è sempre in posizione orizzontale: non puoi ruotarla e non è possibile impostare l'orientamento verticale. Progetta sempre i tuoi giochi TV per essere visualizzati in modalità Orizzontale.

Modalità automatica a bassa latenza

Alcuni display possono eseguire il post-trattamento delle immagini. 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 ridotta (ALLM), che riduce al minimo la latenza disattivando questo post-trattamento. Per maggiori dettagli su ALLM, consulta la specifica HDMI 2.1. Altri display potrebbero supportare una modalità di gioco con 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 il post-processing minimo, 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 scegliere i controlli giusti e assicurarsi che i giocatori li trovino intuitivi e divertenti da usare. La gestione dei controller introduce anche altri problemi da tenere presente, come il monitoraggio di più controller e la gestione delle disconnessioni in modo corretto. Tutte le app TV, inclusi i giochi, devono gestire i controller in modo coerente. Leggi l'articolo Gestire i controller della TV per saperne di più sull'utilizzo dei controller della TV e l'articolo Gestire i controller per i giochi per informazioni specifiche sull'utilizzo dei controller della TV 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 i movimenti utilizzando i tasti WASD, ma questa opzione potrebbe non funzionare correttamente su una tastiera AZERTY con i tasti A e W in posizioni diverse. Puoi ottenere i codici tasti per le chiavi che prevedi 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

Esistono alcuni elementi speciali che i giochi devono includere nel file Android manifest.

Mostra il gioco nella schermata Home

Nella schermata Home di Android TV, i giochi vengono visualizzati 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 file manifest dell'app. 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 informare correttamente gli utenti che il tuo gioco supporta un controller di gioco, devi includere la seguente voce nel file 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". In questo caso, gli utenti non potranno installare la tua app sui dispositivi TV.

Per maggiori informazioni sulle voci manifest, vedi File manifest dell'app.

Servizi per i giochi di Google Play

Se nel tuo gioco sono integrati 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 essere in grado di ottenere gli obiettivi. Per ulteriori informazioni sui risultati e su come implementarli, consulta 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. Per scoprire di più sull'accesso, vedi Implementare l'accesso su Android.

Salvataggio in corso…

Utilizza la funzionalità Partite salvate di Google Play Services per memorizzare la tua partita salvata. Il gioco deve associare i salvataggi a un Account Google specifico, in modo da essere identificabile in modo univoco anche su più dispositivi: che il giocatore utilizzi un cellulare o una TV, il gioco deve essere in grado di recuperare 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 sul cloud. Potresti inserire l'opzione nella schermata Settings del gioco. Per informazioni dettagliate sull'implementazione delle partite salvate utilizzando Play Services, consulta Partite salvate 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 elemento deve essere accessibile con i pulsanti di navigazione del D-pad. Esegui questa operazione invece di affidarti al 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.

Reti

I giochi spesso richiedono una larghezza di banda maggiore per offrire prestazioni ottimali e molti utenti preferiscono Ethernet al Wi-Fi per offrire 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.