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 domaines incluent sa grande taille, son système de contrôle et le fait que tous les joueurs le regardent simultanément.
Écran
Lorsque vous développez des jeux pour un écran de télévision, vous devez principalement penser à concevoir votre jeu pour une orientation paysage et à prendre en charge la faible latence.
Prise en charge de l'affichage en mode Paysage
Un téléviseur est toujours à l'horizontale : vous ne pouvez pas le faire pivoter ni le mettre en mode portrait. Concevez toujours vos jeux TV pour 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é des graphismes, 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 ALLM, consultez la spécification HDMI 2.1. D'autres écrans peuvent être compatibles avec un mode jeu au comportement similaire.
Dans Android 11 et versions ultérieures, une fenêtre peut demander à utiliser le mode à faible latence automatique ou le 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 la qualité graphique.
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 ne disposent pas d'interfaces tactiles. Il est donc encore plus important de bien configurer vos commandes et de vous assurer que les joueurs les trouvent intuitives et amusantes à utiliser. La gestion des contrôleurs pose également d'autres problèmes auxquels il faut faire attention, comme le suivi de plusieurs contrôleurs et la gestion des déconnexions de manière fluide. 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 TV, consultez Gérer les télécommandes TV. Pour en savoir plus sur l'utilisation des télécommandes TV pour les jeux, consultez Prise en main des manettes de jeu.
Dispositions de 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 permet de se déplacer à l'aide des touches WASD, mais cela peut ne pas fonctionner correctement sur un clavier AZERTY dont les touches A et W sont situées à des emplacements différents. Vous pouvez obtenir les codes de touche pour les touches attendues à certains emplacements :
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 désormais créer des gestionnaires d'événements clés pour ces codes de clavier et implémenter le comportement attendu.
Manifest
Les jeux doivent inclure certains éléments spécifiques dans le fichier manifeste Android.
Afficher votre jeu sur l'écran d'accueil
L'écran d'accueil d'Android TV affiche les jeux dans une ligne distincte de celle des applications classiques.
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 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 compatibilité avec android:hardware:gamepad
, ne définissez pas l'attribut android:required
sur "true"
. Si vous le faites, les utilisateurs ne pourront pas installer votre application sur des appareils TV.
Pour en savoir plus sur les entrées de fichier manifeste, consultez 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 éléments concernant les réussites, la connexion et l'enregistrement des jeux.
Exploits
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 gagner des succès. Pour en savoir plus sur les succès et leur implémentation, consultez Succès dans 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 la lui proposer. Pour en savoir plus sur la connexion, consultez Implémenter la connexion sur Android.
Enregistrement…
Utilisez la fonctionnalité Jeux enregistrés des services Google Play pour stocker votre sauvegarde de jeu. Votre jeu doit associer les sauvegardes à un compte Google spécifique afin qu'elles soient identifiables de manière unique, même sur différents 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 fournir 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 dans Android.
Quitter
Fournissez un élément d'interface utilisateur cohérent et évident qui permet à l'utilisateur de quitter le jeu de manière fluide. Cet élément doit être accessible à l'aide des boutons de navigation du pavé directionnel. Faites-le au lieu de vous appuyer sur le bouton Accueil pour quitter, car cela n'est pas cohérent ni fiable sur les différentes télécommandes.
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 vous connecter 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. 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 à la TV, vous n'avez pas besoin de vérifier la présence d'un service 3G/LTE comme vous le feriez pour une application mobile.