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 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:

KotlinJava
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.