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 téléviseur, vous devez garder à l'esprit votre jeu en mode paysage et assurer une faible latence.

Assurer la compatibilité avec l'affichage en mode paysage

Un téléviseur est toujours orienté de travers: vous ne pouvez pas le tourner et l'orientation portrait n'est pas disponible. Toujours concevoir vos jeux TV 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. C'est particulièrement utiles pour les applications de jeu et de visioconférence, où une faible latence est plus importante que avoir les meilleurs graphiques possibles.

Pour activer ou désactiver le post-traitement minimal, appelez Window.setPreferMinimalPostProcessing(), ou définir preferMinimalPostProcessing à 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 applis TV, y compris les jeux, doivent gérer de manière cohérente. Lisez l'article 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 emplacements différents. Vous pouvez obtenir les codes de clavier pour les touches attendues à 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 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 clés pour ces les codes clés et à implémenter le comportement attendu.

Manifest

Le fichier manifeste Android doit inclure des éléments particuliers 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 le <ph type="x-smartling-placeholder"></ph> android:isGame à "true" dans le fichier manifeste de votre application <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. Afin de bien informer 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 du fichier manifeste, consultez 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 réussites (gagnables). Seul un utilisateur contrôlant le jeu depuis un périphérique d'entrée compatible devraient pouvoir remporter des succès. Pour en savoir plus sur des réussites et comment les mettre en œuvre, consultez la section Réussites sur Android.

Se connecter

Votre jeu doit tenter de connecter l'utilisateur au lancement. Si le joueur refuse la connexion à plusieurs reprises fois d'affilée, votre jeu cessera de demander. Pour en savoir plus sur la connexion, consultez la page Implémenter la connexion sur Android

Enregistrement…

Utilisez les jeux enregistrés des services Google Play pour stocker votre sauvegarde. 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 en douceur. Ce doit être accessible à l'aide des boutons de navigation du pavé directionnel. Faites-le au lieu de compter sur Bouton Accueil pour fournir une sortie, car il n'est ni cohérent ni fiable d'une manette à l'autre.

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 les connexions à les services de réseaux sociaux.

Mise en réseau

Les jeux ont souvent besoin d'une plus grande bande passante pour offrir des performances optimales, et de nombreux utilisateurs préfèrent Ethernet sur le Wi-Fi pour fournir ces performances. Votre application devrait vérifier à la fois la connexion Wi-Fi et Ethernet connexions externes. Si votre application est uniquement destinée aux téléviseurs, vous n'avez pas besoin de rechercher un service 3G/LTE comme vous le feriez. pour une application mobile.