Der Fernsehbildschirm bietet eine Reihe von Überlegungen, die für Entwickler von Spielen für Mobilgeräte möglicherweise neu sind. Dazu gehören die Größe, das Steuerungsschema und die Tatsache, dass alle Spieler sie gleichzeitig sehen.
Display
Bei der Entwicklung von Spielen für den Fernseher sind zwei Dinge besonders wichtig: das Spiel für das Querformat zu entwerfen und eine geringe Latenz zu unterstützen.
Unterstützung für Displays im Querformat
Ein Fernseher ist immer im Querformat: Du kannst ihn nicht drehen und es gibt kein Hochformat. Entwickle deine TV-Spiele immer für die Darstellung im Querformat.
Automatischer Modus für geringe Latenzzeit
Bestimmte Displays können eine grafische Nachbearbeitung durchführen. Diese Nachbearbeitung verbessert die Grafikqualität, kann aber die Latenz erhöhen. Neuere Displays, die HDMI 2.1 unterstützen, haben einen automatischen Modus für geringe Latenzzeit (ALLM), der die Latenz minimiert, indem diese Nachbearbeitung deaktiviert wird. Weitere Informationen zu ALLM findest du in der HDMI 2.1-Spezifikation. Andere Displays unterstützen möglicherweise einen Spielmodus mit ähnlichem Verhalten.
Unter Android 11 und höher kann ein Fenster die Verwendung des Modus für geringe Latenzzeit oder des Spielemodus anfordern, sofern verfügbar, indem es eine minimale Nachbearbeitung anfordert. Dies ist besonders nützlich für Spiele- und Videokonferenzanwendungen, bei denen eine niedrige Latenz wichtiger ist als die bestmögliche Grafik.
Wenn du die minimale Nachbearbeitung aktivieren oder deaktivieren möchtest, rufe Window.setPreferMinimalPostProcessing() auf oder setze das Attribut preferMinimalPostProcessing des Fensters auf true. Nicht alle Displays unterstützen die minimale Nachbearbeitung. Mit der Methode Display.isMinimalPostProcessingSupported() kannst du herausfinden, ob ein bestimmtes Display sie unterstützt.
Eingabegeräte
Fernseher haben keine Touch-Oberflächen. Daher ist es umso wichtiger, dass die Steuerung richtig funktioniert und die Spieler sie intuitiv und unterhaltsam finden. Die Verwendung von Controllern bringt auch einige andere Probleme mit sich, die beachtet werden müssen, z. B. die Verwaltung mehrerer Controller und die ordnungsgemäße Handhabung von Verbindungsabbrüchen. Alle TV-Apps, einschließlich Spiele, sollten Controller einheitlich verarbeiten. Weitere Informationen zur Verwendung von TV-Controllern findest du unter TV-Controller verwalten und zur Verwendung von TV-Controllern für Spiele unter Umgang mit Controllern für Spiele.
Tastaturlayouts
In Android 13 (API-Level 33) und höher können Sie Tastaturlayouts mit getKeyCodeForKeyLocation() bestimmen.
Beispielsweise unterstützt dein Spiel die Bewegung mit den WASD-Tasten, aber das funktioniert möglicherweise nicht richtig auf einer AZERTY-Tastatur, bei der sich die Tasten A und W an anderen Stellen befinden. Du kannst die Tastencodes für die Tasten abrufen, die du an bestimmten Positionen erwartest:
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); }
In diesem Beispiel mit einer AZERTY-Tastatur ist keyUp auf KeyEvent.KEYCODE_Z, keyLeft auf KeyEvent.KEYCODE_Q, keyDown auf KeyEvent.KEYCODE_S und keyRight auf KeyEvent.KEYCODE_D festgelegt. Du kannst jetzt Handler für diese Tastencodes erstellen und das erwartete Verhalten implementieren.
Manifest
Es gibt einige besondere Dinge, die Spiele im Android-Manifest enthalten sollten.
Spiel auf dem Startbildschirm präsentieren
Im Startbildschirm von Android TV werden Spiele in einer anderen Zeile als reguläre Apps präsentiert.
Damit dein Spiel in der Liste der Spiele angezeigt wird, setze im App-Manifest im Tag <application>
das Attribut
android:isGame auf "true". Beispiel:
<application ... android:isGame="true" ... >
Unterstützung für Controller deklarieren
Gamecontroller sind für Nutzer von TV-Geräten möglicherweise nicht verfügbar oder aktiv. Damit Nutzer wissen, dass dein Spiel einen Controller unterstützt, musst du den folgenden Eintrag in dein App-Manifest aufnehmen:
<uses-feature android:name="android.hardware.gamepad" android:required="false"/>
Hinweis:Wenn du die Unterstützung für android.hardware.gamepad angibst, setze das Attribut android:required auf "false", wenn dein Spiel auch mit einer Standard-TV-Fernbedienung (Steuerkreuz) gespielt werden kann. Setze android:required nur dann auf "true", wenn zum Spielen deines Spiels ein Controller erforderlich ist.
Wenn du android:required="true" festlegst, wird bei Google Play für Android TV das Badge „Gamepad erforderlich“ und eine Warnung vor der Installation angezeigt, anstatt die Installation auf TV-Geräten zu blockieren.
Weitere Informationen zu Manifesteinträgen finden Sie unter App-Manifest.
Google Play-Spieldienste
Wenn in Ihrem Spiel die Google Play Games-Dienste eingebunden sind, sollten Sie einige Punkte in Bezug auf Erfolge, Anmeldung und gespeicherte Spiele beachten.
Erfolge
Ihr Spiel sollte mindestens fünf (erreichbare) Erfolge enthalten. Nur ein Nutzer, der das Gameplay über ein unterstütztes Eingabegerät steuert, sollte Erfolge erzielen können. Weitere Informationen zu Erfolgen und ihrer Implementierung finden Sie unter Erfolge in Android.
Anmeldung
Ihr Spiel sollte versuchen, den Nutzer beim Start anzumelden. Wenn der Spieler die Anmeldung mehrmals hintereinander ablehnt, sollte Ihr Spiel nicht mehr danach fragen. Weitere Informationen zur Anmeldung finden Sie unter Anmeldung auf Android-Geräten implementieren.
Wird gespeichert
Verwende die gespeicherten Spiele der Google Play-Dienste, um deinen Spielstand zu speichern. In deinem Spiel sollten Spielstände an ein bestimmtes Google-Konto gebunden sein, damit sie auch geräteübergreifend eindeutig identifizierbar sind. Unabhängig davon, ob der Spieler ein Smartphone oder einen Fernseher verwendet, sollte das Spiel die Spielstandsinformationen aus demselben Nutzerkonto abrufen können.
Außerdem sollten Sie in der Benutzeroberfläche Ihres Spiels eine Option anbieten, mit der der Spieler lokal und in der Cloud gespeicherte Daten löschen kann. Sie können die Option auf dem Bildschirm Settings des Spiels platzieren. Spezifische Informationen zur Implementierung von gespeicherten Spielen mithilfe der Play-Dienste finden Sie unter Gespeicherte Spiele in Android.
Beenden
Stellen Sie ein einheitliches und offensichtliches UI-Element bereit, mit dem der Nutzer das Spiel ordnungsgemäß beenden kann. Dieses Element sollte über die Navigationstasten des Steuerkreuzes zugänglich sein. Verlassen Sie sich nicht darauf, dass der Home-Button eine Möglichkeit zum Beenden bietet, da dies nicht bei allen Controllern einheitlich oder zuverlässig funktioniert.
Web
Aktivieren Sie das Surfen im Web nicht in Spielen für Android TV. Android TV unterstützt keinen Webbrowser.
Hinweis: Du kannst die Klasse WebView für die Anmeldung bei sozialen Medien verwenden.
Netzwerk
Spiele benötigen häufig eine höhere Bandbreite, um eine optimale Leistung zu erzielen. Viele Nutzer bevorzugen daher Ethernet gegenüber WLAN, um diese Leistung zu erreichen. Ihre App sollte sowohl nach WLAN- als auch nach Ethernetverbindungen suchen. Wenn deine App nur für Fernseher gedacht ist, musst du nicht wie bei einer mobilen App nach 3G-/LTE-Diensten suchen.