Der Fernsehbildschirm bietet eine Reihe von Überlegungen, die für Entwickler von mobilen Spielen neu sein können. Dazu gehören die Größe, die Steuerung und die Tatsache, dass alle Spieler sie gleichzeitig sehen.
Anzeige
Beim Entwickeln von Spielen für den Fernseher gibt es zwei wichtige Punkte zu beachten: Das Spiel muss für das Querformat konzipiert sein und es muss Unterstützung für niedrige Latenz geben.
Unterstützung von Displays im Querformat
Ein Fernseher ist immer quer ausgerichtet. Er kann nicht gedreht werden und es gibt keine Hochformat-Ausrichtung. Gestalte deine TV-Spiele immer für die Darstellung im Querformat.
Automatischer Modus für geringe Latenzzeit
Bestimmte Displays können die Grafik nachbearbeiten. Diese Nachbearbeitung verbessert die Grafikqualität, kann aber die Latenz erhöhen. Neuere Displays, die HDMI 2.1 unterstützen, haben einen automatischen Modus mit geringer Latenz (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 Spielemodus mit ähnlichem Verhalten.
Unter Android 11 und höher kann ein Fenster anfordern, dass der automatische Modus mit niedriger Latenz oder der Spielemodus verwendet wird, sofern verfügbar, indem minimale Nachbearbeitung angefordert wird. Das ist besonders nützlich für Spiele und Videokonferenzanwendungen, bei denen eine niedrige Latenz wichtiger ist als die bestmögliche Grafik.
Um die minimale Nachbearbeitung zu aktivieren oder zu deaktivieren, rufen Sie Window.setPreferMinimalPostProcessing()
auf oder legen Sie das Attribut preferMinimalPostProcessing
des Fensters auf true
fest. Nicht alle Displays unterstützen eine minimale Nachbearbeitung. Rufen Sie die Methode Display.isMinimalPostProcessingSupported()
auf, um herauszufinden, ob ein bestimmtes Display dies unterstützt.
Eingabegeräte
Fernseher haben keine Touch-Oberflächen. Daher ist es noch wichtiger, dass die Steuerung gut funktioniert und Spieler sie intuitiv und unterhaltsam finden. Die Verarbeitung von Controllern bringt auch einige andere Probleme mit sich, auf die Sie achten müssen, z. B. die Verwaltung mehrerer Controller und die ordnungsgemäße Verarbeitung von Verbindungsunterbrechungen. Alle TV-Apps, einschließlich Spiele, sollten Controller einheitlich verarbeiten. Weitere Informationen zur Verwendung von TV-Controllern findest du unter TV-Controller verwalten und spezifische Informationen zur Verwendung von TV-Controllern für Spiele unter Umgang mit Controllern für Spiele.
Tastaturlayouts
Unter Android 13 (API‑Level 33) und höher können Sie Tastaturlayouts mit getKeyCodeForKeyLocation()
bestimmen.
Ihr Spiel unterstützt beispielsweise die Bewegung mit den WASD-Tasten, was auf einer AZERTY-Tastatur, bei der sich die A- und W-Tasten an anderen Stellen befinden, möglicherweise nicht richtig funktioniert. Sie können die Tastencodes für die Tasten abrufen, die Sie an bestimmten Positionen erwarten:
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 wird bei einer AZERTY-Tastatur keyUp
auf KeyEvent.KEYCODE_Z
und keyLeft
auf KeyEvent.KEYCODE_Q
festgelegt, während keyDown
und keyRight
auf KeyEvent.KEYCODE_S
bzw. KeyEvent.KEYCODE_D
festgelegt werden. Sie können jetzt Schlüsselereignis-Handler für diese Tastencodes erstellen und das erwartete Verhalten implementieren.
Manifest
Für Spiele gibt es einige Besonderheiten, die im Android-Manifest enthalten sein 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, musst du das Attribut
android:isGame
im Tag <application>
des App-Manifests auf "true"
festlegen. Beispiel:
<application ... android:isGame="true" ... >
Unterstützung für Controller deklarieren
Gamecontroller sind für Nutzer eines TV-Geräts möglicherweise nicht verfügbar oder aktiv. Damit Nutzer darüber informiert werden, dass Ihr Spiel einen Controller unterstützt, müssen Sie den folgenden Eintrag in Ihr App-Manifest aufnehmen:
<uses-feature android:name="android.hardware.gamepad" android:required="false"/>
Hinweis:Wenn Sie die Unterstützung von android:hardware:gamepad
angeben, legen Sie das Attribut android:required
nicht auf "true"
fest. Wenn Sie das tun, können Nutzer Ihre App nicht auf Fernsehern installieren.
Weitere Informationen zu Manifesteinträgen finden Sie unter App-Manifest.
Google Play-Spieldienste
Wenn in Ihrem Spiel die Google Play-Spieldienste integriert sind, sollten Sie einige Aspekte in Bezug auf Erfolge, Anmeldung und Speichern von Spielen beachten.
Erfolge
Ihr Spiel sollte mindestens fünf (erreichbare) Erfolge enthalten. Nur Nutzer, die das Gameplay über ein unterstütztes Eingabegerät steuern, sollten 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 zum Anmelden auf Android
Wird gespeichert
Verwende die Google Play-Dienste für gespeicherte Spiele, um deinen Spielstand zu speichern. In deinem Spiel sollten Spielstände an ein bestimmtes Google-Konto gebunden werden, damit sie auch geräteübergreifend eindeutig identifiziert werden können. Unabhängig davon, ob der Spieler ein Smartphone oder einen Fernseher verwendet, sollte das Spiel die Spielstandinformationen aus demselben Nutzerkonto abrufen können.
Sie sollten in der Benutzeroberfläche Ihres Spiels auch eine Option anbieten, mit der der Spieler lokal und in der Cloud gespeicherte Daten löschen kann. Vielleicht kannst du die Option auf dem Settings
-Bildschirm des Spiels platzieren. Spezifische Informationen zur Implementierung gespeicherter Spiele mit Play-Diensten finden Sie unter Gespeicherte Spiele in Android.
Beenden
Stellen Sie ein einheitliches und gut sichtbares UI-Element bereit, mit dem der Nutzer das Spiel ordnungsgemäß beenden kann. Auf dieses Element sollte mit den Navigationstasten des Steuerkreuzes zugegriffen werden können. Verlassen Sie sich nicht auf die Home-Taste, da sie bei verschiedenen Controllern nicht einheitlich und zuverlässig funktioniert.
Web
Aktivieren Sie das Surfen im Web in Spielen für Android TV nicht. Android TV unterstützt keinen Webbrowser.
Hinweis:Sie können die WebView
-Klasse für Anmeldungen bei Social-Media-Diensten verwenden.
Netzwerke
Spiele benötigen häufig eine höhere Bandbreite, um eine optimale Leistung zu erzielen. Viele Nutzer bevorzugen Ethernet gegenüber WLAN, um diese Leistung zu erzielen. Ihre App sollte sowohl WLAN- als auch Ethernet-Verbindungen prüfen. Wenn Ihre App nur für Fernseher bestimmt ist, müssen Sie nicht wie bei einer mobilen App nach 3G-/LTE-Diensten suchen.