Créer des jeux TV

L'écran de télévision présente un certain nombre de considérations qui peuvent être nouvelles dans les jeux mobiles. développeurs. Ces aspects incluent sa grande taille, son système de contrôle et le fait que tous les joueurs les regardent en même temps.

Écran

Lorsque vous développez des jeux pour écran TV, vous devez garder à l'esprit 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 pour qu'ils s'affichent en mode Paysage.

Mode auto à faible latence

Certains écrans peuvent effectuer un post-traitement graphique. Ce post-traitement améliore le graphisme mais peut augmenter la latence. Les écrans récents, compatibles avec HDMI 2.1, ont un mode basse automatique le mode de latence (ALLM), qui permet de réduire la latence en désactivant ce post-traitement. Pour pour en savoir plus sur ALLM, consultez Spécification HDMI 2.1 Autre écrans peuvent proposer un mode Jeu ayant un comportement similaire.

Sous Android 11 et versions ultérieures, une fenêtre peut demander au mode automatique à faible latence ou au jeu soit utilisé, s'il est disponible, 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 un post-traitement minimal. pour savoir si un compatible avec l'écran en question, 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 s'assure que les joueurs les trouvent intuitifs et amusants à utiliser. Gérer les manettes présente également d'autres problèmes auxquels vous devez prêter attention, comme le suivi de plusieurs et gérer les déconnexions de manière fluide. Toutes les applications TV, y compris les jeux, doivent gérer les manettes de manière cohérente. Consultez Gérer le téléviseur manettes pour en savoir plus sur leur utilisation Prise en charge des manettes de jeu pour des des informations sur l'utilisation des manettes TV pour les jeux.

Dispositions du clavier

Sur Android 13 (niveau d'API 33) ou version ultérieure, vous pouvez déterminer la disposition du clavier à l'aide de getKeyCodeForKeyLocation() Par exemple, votre jeu est compatible avec les mouvements à l'aide des touches ZQSD, mais cela risque de ne pas fonctionner correctement sur un clavier AZERTY dont les touches A et W sont à des endroits différents. Vous pouvez obtenir les codes de touche pour les touches que vous attendez à certaines positions :

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

Dans cet exemple, avec un clavier AZERTY, keyUp est défini sur La valeur de "KeyEvent.KEYCODE_Z", "keyLeft" est "KeyEvent.KEYCODE_Q", tandis que keyDown et keyRight sont définies sur KeyEvent.KEYCODE_S et KeyEvent.KEYCODE_D respectivement. Vous pouvez désormais créer des gestionnaires d'événements de touche 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 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é android:hardware:gamepad, ne définissez pas android:required à "true". Sinon, les utilisateurs ne pourront pas installer votre application sur les téléviseurs.

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 des services de jeux Google Play, vous devez garder à l'esprit un certain nombre considérations relatives aux réussites, à 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 sur leur implémentation, consultez la section Succès sur Android.

Se connecter

Votre jeu doit tenter de connecter l'utilisateur au lancement. 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 la page Implémenter la connexion Android

Enregistrement…

Utilisez les Jeux enregistrés des services Google Play pour stocker votre sauvegarde de jeu. Votre jeu doit lier les sauvegardes de jeu à un compte Google spécifique, afin d'être identifiable de manière unique, même sur tous les appareils. Que le joueur utilise un téléphone portable ou un téléviseur, jeu doit pouvoir extraire les informations de sauvegarde du même compte utilisateur.

Vous devez également proposer une option dans l'interface utilisateur de votre jeu permettant au joueur de supprimer des éléments localement et stockées dans le cloud. Vous pouvez placer l'option sur l'écran Settings du jeu. Pour les spécificités de l'implémentation des jeux enregistrés à l'aide des services Play, consultez l'article Jeux enregistrés sous 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 devrait vérifier à la fois la connexion Wi-Fi et Ethernet connexions externes. Si votre application est destinée uniquement à la télévision, vous n'avez pas besoin de vérifier la disponibilité du service 3G/LTE comme vous le feriez pour une application mobile.