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 aspects incluent sa grande taille, son schéma de contrôle et le fait que tous les joueurs la regardent simultanément.
Écran
Les deux principaux éléments à prendre en compte lors du développement de jeux pour l'écran d'un téléviseur sont la conception de votre jeu pour une orientation paysage et la prise en charge d'une faible latence.
Permettre l'affichage en mode paysage
Un téléviseur est toujours en mode paysage : vous ne pouvez pas le faire pivoter, et il n'y a pas de mode portrait. Concevez toujours vos jeux TV 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 HDMI 2.1 disposent d'un mode de 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 être compatibles avec un mode Jeu au comportement similaire.
Sous Android 11 ou version ultérieure, une fenêtre peut demander l'utilisation du mode à faible latence automatique ou du mode Jeu, s'ils sont disponibles, 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 est compatible, appelez la méthode Display.isMinimalPostProcessingSupported().
Périphériques d'entrée
Les téléviseurs ne disposent pas d'interfaces tactiles. Il est donc d'autant plus important de bien configurer vos commandes et de vous assurer que les joueurs les trouvent intuitives et agréables à utiliser. La gestion des manettes présente également d'autres problèmes auxquels il faut prêter attention, comme le suivi de plusieurs manettes 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 manettes de jeu, consultez Gérer les manettes de jeu et Prise en main des manettes de jeu.
Dispositions de clavier
Sur 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 déplacements à l'aide des touches ZQSD, mais cela peut ne pas fonctionner correctement sur un clavier QWERTY, où les touches Q et W se trouvent à 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 est défini sur KeyEvent.KEYCODE_Q, tandis que keyDown et keyRight sont définis respectivement 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 implémenter le comportement attendu.
Fichier manifeste
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 de celle 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é avec android.hardware.gamepad, définissez l'attribut android:required sur "false" si votre jeu peut également être joué avec une télécommande TV standard (pavé directionnel). Définissez android:required sur "true" uniquement si une manette de jeu est requise pour jouer à votre jeu.
La définition de android:required="true" affiche un badge "Manette de jeu requise" et un avertissement de préinstallation sur Google Play pour Android TV, au lieu de bloquer l'installation 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 les services Google Play Games, vous devez tenir compte d'un certain nombre de points concernant les réussites, la connexion et les jeux enregistrés.
Réussites
Votre jeu doit inclure au moins cinq succès (à débloquer). Seul un utilisateur contrôlant le gameplay à partir d'un périphérique d'entrée compatible doit pouvoir débloquer des succès. Pour en savoir plus sur les réussites et leur implémentation, consultez Réussites sur Android.
Connexion
Votre jeu doit tenter de connecter l'utilisateur au lancement. Si le joueur refuse de se connecter plusieurs fois de suite, votre jeu doit cesser de le lui 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 sauvegarde de jeu. Votre jeu doit lier les sauvegardes à un compte Google spécifique, afin d'être identifiable de manière unique, même sur plusieurs appareils. Que le joueur utilise un téléphone ou un téléviseur, le jeu doit pouvoir extraire les informations de sauvegarde du même compte utilisateur.
Vous devez également proposer une option dans l'UI 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 facilement. Cet élément doit être accessible à l'aide des boutons de navigation du pavé directionnel. Procédez ainsi au lieu de vous fier au bouton d'accueil pour fournir une sortie, car cela n'est ni cohérent, ni fiable sur les différents contrôleurs.
Web
N'activez pas 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 les connexions aux services de réseaux sociaux.
Mise en réseau
Les jeux ont souvent besoin d'une bande passante plus importante pour offrir des performances optimales, et de nombreux utilisateurs préfèrent Ethernet au Wi-Fi pour obtenir ces performances. Votre application doit vérifier les connexions Wi-Fi et Ethernet. Si votre application est réservée aux téléviseurs, vous n'avez pas besoin de vérifier la disponibilité du service 3G/LTE comme vous le feriez pour une application mobile.