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 commande et le fait que tous les joueurs le regardent simultanément.
Écran
Lorsque vous développez des jeux pour l'écran de télévision, vous devez principalement concevoir votre jeu en mode paysage et prendre en charge la faible latence.
Prise en charge de l'affichage en mode paysage
Un téléviseur est toujours placé sur le côté : vous ne pouvez pas le faire pivoter et il n'existe pas de mode portrait. Concevez toujours vos jeux pour téléviseur afin 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 la norme 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 à ce que le mode à faible latence automatique ou le mode jeu soit utilisé, 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 la meilleure qualité graphique 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. Le post-traitement minimal n'est pas compatible avec tous les écrans. Pour savoir si un
écran particulier le prend en charge, appelez la
Display.isMinimalPostProcessingSupported() méthode.
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 manettes pose également d'autres problèmes à prendre en compte, comme le suivi de plusieurs manettes 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 manettes TV, consultez Gérer les manettes TV. Pour obtenir des informations spécifiques sur l'utilisation des manettes TV pour les jeux, consultez Gérer les manettes pour les jeux.
Dispositions de clavier
Dans Android 13 (niveau d'API 33) et versions ultérieures, 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 WASD, mais cela peut ne pas fonctionner correctement sur
un clavier AZERTY, dont les touches A et W se trouvent à des emplacements différents. Vous pouvez obtenir les codes de touche
pour les touches que vous attendez à 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 est défini 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 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 dans une ligne distincte des applications classiques.
Pour que votre jeu apparaisse dans la liste des jeux, définissez l'
android:isGame attribut 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
Les manettes de jeu peuvent ne pas être 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 prise en charge de 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). Ne définissez android:required sur
"true" que si une manette de jeu est requise pour jouer à votre jeu.
Si vous définissez android:required="true", un badge "Manette requise"
et un avertissement de pré-installation s'affichent sur Google Play pour Android TV, au lieu de
bloquer l'installation sur les 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 Google Play Games, vous devez tenir compte de plusieurs éléments concernant les succès, la connexion et les jeux enregistrés.
Réussites
Votre jeu doit inclure au moins cinq succès (à gagner). Seul un utilisateur contrôlant le jeu à 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.
Connexion
Votre jeu doit tenter de connecter l'utilisateur au lancement. Si le joueur refuse la connexion plusieurs fois de suite, votre jeu doit cesser de 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 sauvegarde de jeu. Votre jeu doit lier les sauvegardes de jeu à un compte Google spécifique, afin qu'il soit 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 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 dans l'écran Settings du jeu. Pour obtenir des informations spécifiques 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. Procédez ainsi au lieu de vous appuyer sur le bouton Accueil pour quitter le jeu, car il n'est ni cohérent ni fiable sur différentes manettes.
Web
N'activez pas la navigation 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 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, et de nombreux utilisateurs préfèrent Ethernet au Wi-Fi pour cela. Votre application doit vérifier les connexions Wi-Fi et Ethernet. Si votre application est destinée uniquement à la TV, vous n'avez pas besoin de vérifier le service 3G/LTE comme vous le feriez pour une application mobile.