Créer des jeux TV

L'écran de télévision présente un certain nombre de considérations qui peuvent ne pas être nouvelles pour les développeurs de jeux mobiles. Ces zones incluent sa grande taille, son schéma de contrôle et le fait que tous les joueurs la visualisent en même temps.

Écran

Lorsque vous développez des jeux pour écran de télévision, les deux principaux éléments à garder à l'esprit consistent à concevoir un jeu pour un mode paysage et à assurer une faible latence.

Assurer la compatibilité avec l'affichage en mode paysage

Un téléviseur est toujours de travers: vous ne pouvez pas le tourner et l'orientation portrait n'est pas disponible. Concevez toujours vos jeux télévisés pour qu'ils s'affichent en mode Paysage.

Mode automatique à faible latence

Certains écrans peuvent effectuer un post-traitement graphique. Ce post-traitement améliore la qualité graphique, mais peut augmenter la latence. Les écrans plus récents compatibles avec le HDMI 2.1 disposent d'un mode à faible latence automatique (ALLM), qui minimise la latence en désactivant ce post-traitement. Pour plus d'informations sur ALLM, reportez-vous à la spécification HDMI 2.1. D'autres écrans peuvent être compatibles avec un mode Jeu ayant un comportement similaire.

Sous Android 11 et versions ultérieures, une fenêtre peut demander l'utilisation du mode à faible latence automatique ou du mode Jeu, s'il est disponible, en demandant un post-traitement minimal. Cela est particulièrement utile pour les applications de jeu et de visioconférence, où une faible latence est plus importante que de disposer des meilleures performances graphiques possible.

Pour activer ou désactiver le post-traitement minimal, appelez Window.setPreferMinimalPostProcessing() ou définissez l'attribut preferMinimalPostProcessing de la fenêtre sur true. Tous les écrans ne prennent pas en charge le post-traitement minimal. Pour savoir si un écran particulier le permet, appelez la méthode Display.isMinimalPostProcessingSupported().

Périphériques d'entrée

Les téléviseurs n'étant pas équipés d'interfaces tactiles, il est encore plus important de bien maîtriser les commandes, et de veiller à ce que les joueurs les trouvent intuitives et amusantes à utiliser. La manipulation des manettes introduit également d'autres problèmes auxquels vous devez prêter attention, comme le suivi de plusieurs manettes et la gestion optimale des déconnexions. Toutes les applications TV, y compris les jeux, doivent gérer les manettes de manière cohérente. Consultez Gérer les manettes de télévision pour en savoir plus sur l'utilisation des manettes de télévision et la section Gérer les manettes pour les jeux pour en savoir plus sur leur utilisation.

Dispositions du clavier

Sous Android 13 (niveau d'API 33) ou version ultérieure, vous pouvez déterminer les dispositions de clavier à l'aide de getKeyCodeForKeyLocation(). Par exemple, votre jeu prend en charge les mouvements à l'aide des touches ZQSD, mais il est possible que cela ne fonctionne pas correctement sur un clavier AZERTY dont les touches A et W se trouvent à des endroits différents. Vous pouvez obtenir les codes des clés attendues à certaines positions:

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);
}

Dans cet exemple, avec un clavier AZERTY, keyUp est défini sur KeyEvent.KEYCODE_Z, keyLeft sur KeyEvent.KEYCODE_Q, tandis que keyDown et keyRight sont respectivement définis sur KeyEvent.KEYCODE_S et KeyEvent.KEYCODE_D. Vous pouvez maintenant créer des gestionnaires d'événements de touche pour ces codes de touche et mettre en œuvre le comportement attendu.

Manifest

Les jeux doivent inclure des éléments spéciaux dans le fichier manifeste Android.

Afficher votre jeu sur l'écran d'accueil

L'écran d'accueil d'Android TV affiche les jeux sur une ligne distincte de celle des applications standards. Pour que votre jeu figure dans la liste des jeux, définissez l'attribut android:isGame sur "true" dans la balise <application> du fichier manifeste de votre application. Par exemple :

<application
    ...
    android:isGame="true"
    ...
>

Déclarer la prise en charge des manettes de jeu

Il est possible que les manettes de jeu ne soient pas disponibles ou actives pour les utilisateurs d'un téléviseur. Pour informer correctement les utilisateurs que votre jeu est compatible avec une manette de jeu, vous devez inclure l'entrée suivante dans le fichier manifeste de votre application:

  <uses-feature android:name="android.hardware.gamepad" android:required="false"/>

Remarque:Lorsque vous spécifiez la compatibilité avec android:hardware:gamepad, ne définissez pas l'attribut android:required sur "true". Dans ce cas, les utilisateurs ne pourront pas installer votre application sur les téléviseurs.

Pour en savoir plus sur les entrées du fichier manifeste, consultez Fichier manifeste d'application.

Services de jeux Google Play

Si votre jeu intègre des services de jeux Google Play, vous devez garder à l'esprit un certain nombre de considérations concernant les réussites, la connexion et l'enregistrement des jeux.

Réussites

Votre jeu doit inclure au moins cinq réussites (réalisables). Seul un utilisateur contrôlant le jeu à partir d'un périphérique d'entrée compatible peut remporter des succès. Pour en savoir plus sur les succès et leur implémentation, consultez Réussites dans Android.

Se connecter

Votre jeu doit tenter de connecter l'utilisateur au lancement. Si le joueur refuse de se connecter plusieurs fois d'affilée, votre jeu ne devrait plus poser de questions. Pour en savoir plus sur la connexion, consultez Implémenter la connexion sur Android.

Enregistrement…

Utilisez la section Jeux enregistrés des services Google Play pour stocker le jeu que vous avez sauvegardé. Votre jeu doit lier les sauvegardes de jeu à un compte Google spécifique, de manière à être identifiable de manière unique, même sur tous les appareils: que le joueur utilise un téléphone ou un téléviseur, le jeu doit pouvoir extraire les informations de sauvegarde à partir du même compte utilisateur.

Vous devez également proposer une option dans l'interface utilisateur de votre jeu pour permettre au joueur de supprimer les données en local et dans le cloud. Vous pouvez placer l'option sur l'écran Settings du jeu. Pour en savoir plus sur l'implémentation de jeux enregistrés à l'aide des services Play, consultez Jeux enregistrés sur Android.

Quitter

Fournissez un élément d'interface utilisateur cohérent et évident qui permet à l'utilisateur de quitter le jeu en douceur. Cet élément doit être accessible à l'aide des boutons de navigation du pavé directionnel. Procédez ainsi plutôt que d'utiliser le bouton d'accueil pour fournir une sortie, car cette méthode n'est ni cohérente, ni fiable sur les différents contrôleurs.

Web

Ne pas activer la navigation Web dans les jeux pour Android TV. Android TV n'est pas compatible avec les navigateurs Web.

Remarque:Vous pouvez utiliser la classe WebView pour vous connecter aux réseaux sociaux.

Mise en réseau

Les jeux ont souvent besoin d'une plus grande bande passante pour offrir des performances optimales, et de nombreux utilisateurs préfèrent l'Ethernet au Wi-Fi pour obtenir ces performances. Votre application doit vérifier les connexions Wi-Fi et Ethernet. Si votre application est destinée uniquement à la télévision, vous n'avez pas besoin de rechercher le service 3G/LTE comme vous le feriez pour une application mobile.