Créer des jeux TV

L'écran de télévision présente un certain nombre de considérations qui peuvent être nouvelles pour les développeurs de jeux mobiles. Ces éléments incluent sa grande taille, son schéma de commande et le fait que tous les joueurs le regardent simultanément.

Écran

Lorsque vous développez des jeux pour téléviseur, veillez à concevoir votre jeu en mode paysage et à assurer une faible latence.

Prise en charge de l'affichage en mode paysage

Un téléviseur est toujours à l'horizontale: vous ne pouvez pas le tourner, et il n'existe pas d'orientation portrait. Concevez toujours vos jeux TV de sorte qu'ils s'affichent en mode Paysage.

Mode à faible latence automatique

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 HDMI 2.1 disposent d'un mode à faible latence automatique (ALLM), qui réduit la latence en désactivant ce post-traitement. Pour en savoir plus sur l'ALLM, consultez la spécification HDMI 2.1. D'autres écrans peuvent prendre en charge un mode jeu avec un comportement similaire.

Dans Android 11 et versions ultérieures, une fenêtre peut demander l'utilisation du mode à faible latence automatique ou du mode Jeu, le cas échéant, en demandant un post-traitement minimal. Cela est particulièrement utile pour les applications de jeux et de visioconférence, où une faible latence est plus importante que d'avoir les meilleurs graphismes possibles.

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 sont pas compatibles avec le post-traitement minimal. Pour savoir si un écran particulier l'est, 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 choisir vos commandes et de vous assurer que les joueurs les trouvent intuitives et amusantes à utiliser. La gestion des contrôleurs introduit également d'autres problèmes à prendre en compte, comme le suivi de plusieurs contrôleurs et la gestion des déconnexions de manière appropriée. Toutes les applications TV, y compris les jeux, doivent gérer les manettes de manière cohérente. Pour en savoir plus sur l'utilisation des télécommandes de téléviseur, consultez Gérer les télécommandes de téléviseur. Pour en savoir plus sur l'utilisation des télécommandes de téléviseur pour les jeux, consultez Gérer les manettes de jeu.

Dispositions du clavier

Dans 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 est compatible avec les mouvements à l'aide des touches WASD, mais cela peut ne pas fonctionner correctement sur un clavier AZERTY, où les touches A et W sont à des emplacements différents. Vous pouvez obtenir les codes de touche pour les touches que vous attendez à 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 définis sur KeyEvent.KEYCODE_S et KeyEvent.KEYCODE_D, respectivement. Vous pouvez maintenant créer des gestionnaires d'événements clés pour ces codes de touche et implémenter le comportement attendu.

Manifest

Les jeux doivent inclure certains é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 des applications standards. Pour que votre jeu apparaisse dans la liste des jeux, définissez l'attribut android:isGame sur "true" dans la balise <application> du fichier manifeste de votre application. 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 ne soient pas activées pour les utilisateurs d'un appareil TV. 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 prise en charge de 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 appareils TV.

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

Services de jeux Google Play

Si votre jeu intègre les services de jeux Google Play, vous devez tenir compte de plusieurs points concernant les succès, la connexion et l'enregistrement des jeux.

Succès

Votre jeu doit inclure au moins cinq succès (obtenables). Seul un utilisateur qui contrôle le jeu à l'aide d'un appareil d'entrée compatible doit pouvoir gagner des succès. Pour en savoir plus sur les succès et leur mise en œuvre, consultez la section Réussites sous Android.

Se connecter

Votre jeu doit tenter de connecter l'utilisateur au démarrage. Si le joueur refuse la connexion plusieurs fois de suite, votre jeu ne doit plus le demander. Pour en savoir plus sur la connexion, consultez Implémenter la connexion sur Android.

Enregistrement…

Utilisez les jeux enregistrés des services Google Play pour stocker votre partie enregistrée. Votre jeu doit associer les sauvegardes de jeu à un compte Google spécifique afin d'être identifiable de manière unique, même entre les appareils. Que le joueur utilise un téléphone ou une télévision, le jeu doit pouvoir extraire les informations de sauvegarde du jeu à partir du même compte utilisateur.

Vous devez également fournir une option dans l'interface utilisateur de votre jeu pour permettre au joueur de supprimer les données stockées localement et dans le cloud. Vous pouvez placer l'option sur l'écran Settings du jeu. Pour en savoir plus sur l'implémentation des 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 de manière élégante. Cet élément doit être accessible avec les boutons de navigation du pavé directionnel. Faites-le plutôt que de vous fier au bouton Accueil pour quitter l'application, car ce n'est pas cohérent ni fiable entre les différentes manettes.

Web

Ne pas activer la navigation sur le Web dans les jeux pour Android TV. Android TV n'est pas compatible avec un navigateur Web.

Remarque:Vous pouvez utiliser la classe WebView pour les connexions aux services de réseaux sociaux.

Mise en réseau

Les jeux ont souvent besoin d'une bande passante plus élevée 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 uniquement destinée aux téléviseurs, vous n'avez pas besoin de rechercher le service 3G/LTE comme vous le feriez pour une application mobile.