TV-Spiele entwickeln

Der Fernsehbildschirm bringt eine Reihe von Überlegungen mit sich, die für Entwickler von Spielen für Mobilgeräte möglicherweise neu sind. Dazu gehören die Größe des Bildschirms, das Steuerungsschema und die Tatsache, dass alle Spieler gleichzeitig auf den Bildschirm schauen.

Display

Bei der Entwicklung von Spielen für den Fernsehbildschirm sind zwei Dinge besonders wichtig: Das Spiel muss für die horizontale Ausrichtung konzipiert sein und eine geringe Latenz unterstützen.

Unterstützung für die horizontale Ausrichtung

Ein Fernseher ist immer seitlich ausgerichtet. Er kann nicht gedreht werden und es gibt keine vertikale Ausrichtung. Spiele für den Fernseher sollten immer im Querformat angezeigt werden.

Automatischer Modus für geringe Latenzzeit

Bestimmte Displays können Grafiken nachbearbeiten. Diese Nachbearbeitung verbessert die Grafik qualität, kann aber die Latenz erhöhen. Neuere Displays, die HDMI 2.1 unterstützen, haben einen automatischen Modus für geringe Latenzzeit (Auto Low Latency Mode, ALLM), der die Latenz minimiert, indem er diese Nachbearbeitung deaktiviert. Weitere Informationen zu ALLM finden Sie in der HDMI 2.1-Spezifikation. Andere Displays unterstützen möglicherweise einen Spielmodus mit ähnlichem Verhalten.

In Android 11 und höher kann ein Fenster anfordern, dass der automatische Modus für geringe Latenzzeit oder der Spiel modus verwendet wird, sofern verfügbar, indem es minimale Nachbearbeitung anfordert. Dies ist besonders nützlich für Spiele- und Videokonferenzanwendungen, bei denen eine geringe Latenz wichtiger ist als die bestmögliche Grafik.

Wenn Sie die minimale Nachbearbeitung aktivieren oder deaktivieren möchten, rufen Sie Window.setPreferMinimalPostProcessing(), auf oder legen Sie das Attribut preferMinimalPostProcessing des Fensters auf true fest. Nicht alle Displays unterstützen die minimale Nachbearbeitung. Rufen Sie die Display.isMinimalPostProcessingSupported() Methode auf, um herauszufinden, ob ein bestimmtes Display sie unterstützt.

Eingabegeräte

Fernseher haben keine Touch-Oberflächen. Daher ist es noch 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, auf die Sie achten müssen, z. B. das Verwalten mehrerer Controller und das reibungslose Behandeln von Verbindungsabbrüchen. Alle TV-Apps, einschließlich Spiele, sollten Controller einheitlich behandeln. Weitere Informationen zur Verwendung von TV-Controllern finden Sie unter TV-Controller verwalten. Spezifische Informationen zur Verwendung von TV-Controllern für Spiele finden Sie unter Controller für Spiele verwalten.

Tastaturlayouts

In 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. Das funktioniert jedoch möglicherweise nicht richtig auf einer AZERTY-Tastatur, bei der sich die Tasten „A“ und „W“ an anderen Stellen befinden. 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 ist bei einer AZERTY-Tastatur keyUp auf KeyEvent.KEYCODE_Z festgelegt, keyLeft auf KeyEvent.KEYCODE_Q festgelegt, während keyDown und keyRight auf KeyEvent.KEYCODE_S bzw. KeyEvent.KEYCODE_D festgelegt sind. Sie können jetzt Key-Event-Handler für diese Tastencodes erstellen und das erwartete Verhalten implementieren.

Manifest

Es gibt einige spezielle Dinge, die Spiele im Android-Manifest enthalten sollten.

Spiel auf dem Startbildschirm anzeigen

Im Startbildschirm von Android TV werden Spiele in einer anderen Zeile als reguläre Apps präsentiert. Damit Ihr Spiel in der Liste der Spiele angezeigt wird, legen Sie das android:isGame Attribut auf "true" im Tag <application> des App-Manifests fest. 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 richtig informiert werden, dass Ihr Spiel einen Gamecontroller unterstützt, müssen Sie den folgenden Eintrag in das App-Manifest aufnehmen:

  <uses-feature android:name="android.hardware.gamepad" android:required="false"/>

Hinweis: Wenn Sie die Unterstützung für android:hardware:gamepad angeben, legen Sie das android:required Attribut nicht auf "true" fest. Andernfalls können Nutzer Ihre App nicht auf TV-Geräten installieren.

Weitere Informationen zu Manifesteinträgen finden Sie unter App-Manifest.

Google Play-Spieldienste

Wenn Ihr Spiel die Google Play-Spieldienste einbindet, sollten Sie einige Punkte in Bezug auf Erfolge, Anmeldung und Speichern von Spielen 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 in Android implementieren.

Wird gespeichert

Verwenden Sie die Google Play-Dienste für gespeicherte Spiele, um den Spielstand zu speichern. Ihr Spiel sollte Spielstände mit einem bestimmten Google-Konto verknüpfen, damit sie auch auf verschiedenen Geräten eindeutig identifiziert werden können. Unabhängig davon, ob der Spieler ein Mobiltelefon 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. Sie können die Option auf dem Bildschirm Settings des Spiels platzieren. Spezifische Informationen zur Implementierung gespeicherter Spiele mit den Play-Diensten finden Sie unter Gespeicherte Spiele in Android.

Beenden

Bieten Sie ein einheitliches und gut sichtbares UI-Element, mit dem der Nutzer das Spiel ordnungsgemäß beenden kann. Dieses Element sollte mit den Navigationstasten des Steuerkreuzes zugänglich sein. Verlassen Sie sich nicht auf die Home-Taste, um das Spiel zu beenden, da dies bei verschiedenen Controllern nicht einheitlich und zuverlässig funktioniert.

Web

Aktivieren Sie in Spielen für Android TV nicht das Surfen im Web. Android TV unterstützt keinen Webbrowser.

Hinweis: Sie können die Klasse WebView für Anmeldungen bei sozialen Netzwerken verwenden.

Netzwerk

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 den Fernseher bestimmt ist, müssen Sie nicht nach 3G/LTE-Diensten suchen, wie Sie es bei einer mobilen App tun würden.