TV-Spiele entwickeln

Der Fernsehbildschirm stellt Entwickler von mobilen Spielen vor einige Herausforderungen, die sie vielleicht noch nicht kennen. Dazu gehören die große Größe, die Steuerung und die Tatsache, dass sich alle Spieler das Spiel gleichzeitig ansehen.

Anzeige

Die beiden wichtigsten Dinge, die Sie bei der Entwicklung von Spielen für den Fernsehbildschirm beachten sollten, sind die Ausrichtung des Spiels im Querformat und die Unterstützung einer niedrigen Latenz.

Unterstützung von Displays im Querformat

Ein Fernseher ist immer querformatig: Er kann nicht gedreht werden und es gibt keine Hochformatausrichtung. Optimieren Sie Ihre Fernsehspiele immer für die Darstellung im Querformat.

Automatischer Modus für geringe Latenzzeit

Bestimmte Displays können eine Grafik-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 mit niedriger Latenz (ALLM), der die Latenz minimiert, indem diese Nachbearbeitung deaktiviert wird. Weitere Informationen zu ALLM finden Sie 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 automatischen Modus mit niedriger Latenz oder des Spielmodus anfordern, sofern verfügbar, indem minimale Nachbearbeitung angefordert wird. Das ist besonders für Spiele- und Videokonferenzanwendungen nützlich, bei denen eine niedrige 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 preferMinimalPostProcessing-Attribut des Fensters auf true fest. Nicht alle Displays unterstützen die minimale Nachbearbeitung. Wenn Sie herausfinden möchten, ob ein bestimmtes Display sie unterstützt, rufen Sie die Methode Display.isMinimalPostProcessingSupported() auf.

Eingabegeräte

Fernseher haben keine Touchbedienung. Daher ist es umso wichtiger, die Steuerelemente richtig zu gestalten und dafür zu sorgen, dass sie für die Spieler intuitiv und unterhaltsam sind. Bei der Verarbeitung von Controllern müssen Sie auch auf einige andere Probleme achten, z. B. auf die Verfolgung mehrerer Controller und die reibungslose Verarbeitung von Unterbrechungen. Alle TV-Apps, einschließlich Spiele, sollten Controller einheitlich verarbeiten. Weitere Informationen zur Verwendung von Fernseher-Controllern findest du unter Fernseher-Controller verwalten. Unter Umgang mit Controllern für Spiele findest du spezielle Informationen zur Verwendung von Fernseher-Controllern für Spiele.

Tastaturlayouts

Unter Android 13 (API-Level 33) und höher können Sie Tastaturlayouts mit getKeyCodeForKeyLocation() festlegen. Angenommen, Ihr Spiel unterstützt die Bewegung mit den WASD-Tasten. Dies funktioniert jedoch möglicherweise nicht richtig auf einer AZERTY-Tastatur, auf der die Tasten A und W an unterschiedlichen Stellen sind. Sie können die Tastencodes für die Tasten abrufen, die an bestimmten Positionen erwartet werden:

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, keyLeft auf KeyEvent.KEYCODE_Q, keyDown auf KeyEvent.KEYCODE_S und keyRight auf KeyEvent.KEYCODE_D festgelegt. Sie können jetzt Schlüsselereignis-Handler für diese Schlüsselcodes erstellen und das erwartete Verhalten implementieren.

Manifest

Für Spiele gibt es einige spezielle Anforderungen an das Android-Manifest.

Spiel auf dem Startbildschirm präsentieren

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, müssen Sie das Attribut android:isGame im Tag <application> Ihres App-Manifests auf "true" festlegen. Beispiel:

<application
    ...
    android:isGame="true"
    ...
>

Unterstützung für Gamecontroller deklarieren

Gamecontroller sind für Nutzer von Fernsehern 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 Ihr App-Manifest aufnehmen:

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

Hinweis:Wenn Sie android:hardware:gamepad-Unterstützung angeben, dürfen Sie das Attribut android:required nicht auf "true" festlegen. In diesem Fall können Nutzer Ihre App nicht auf Fernsehern installieren.

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

Google Play-Spieldienste

Wenn Sie in Ihrem Spiel Google Play-Spieldienste einbinden, sollten Sie einige Aspekte im Hinblick auf Erfolge, Anmeldung und Speichern von Spielen beachten.

Erfolge

Ihr Spiel sollte mindestens fünf (erzielbare) Erfolge enthalten. Nur ein Nutzer, der das Gameplay über ein unterstütztes Eingabegerät steuert, sollte in der Lage sein, Erfolge zu erzielen. Weitere Informationen zu Erfolgen und ihrer Implementierung finden Sie unter Erfolge unter Android.

Anmelden

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 unter Android implementieren.

Wird gespeichert

Verwenden Sie die Gespeicherten Spiele von Google Play-Diensten, um Ihren Spielstand zu speichern. Ihr Spiel sollte Spielstände an ein bestimmtes Google-Konto binden, 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 Informationen zum Spielstand aus demselben Nutzerkonto abrufen können.

Sie sollten in der Benutzeroberfläche Ihres Spiels auch eine Option anbieten, mit der Spieler lokal und in der Cloud gespeicherte Daten löschen können. Sie können die Option auf dem Bildschirm Settings des Spiels platzieren. Weitere Informationen zur Implementierung von gespeicherten Spielen mit Play-Diensten finden Sie unter Gespeicherte Spiele unter Android.

Beenden

Bieten Sie ein einheitliches und eindeutiges UI-Element, mit dem Nutzer das Spiel ordnungsgemäß beenden können. Dieses Element sollte über die Navigationstasten des D-Pads zugänglich sein. Verwenden Sie diese Option, anstatt das Beenden über die Startbildschirmtaste zu ermöglichen, da dies nicht einheitlich und nicht zuverlässig auf verschiedenen Controllern 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 Klasse WebView für Anmeldungen in sozialen Medien verwenden.

Netzwerke

Spiele benötigen häufig eine größere Bandbreite, um eine optimale Leistung zu erzielen. Viele Nutzer bevorzugen Ethernet gegenüber WLAN, um diese Leistung zu erzielen. Ihre App sollte sowohl nach WLAN- als auch nach Ethernetverbindungen suchen. Wenn Ihre App nur für Fernseher gedacht ist, müssen Sie nicht wie bei einer mobilen App prüfen, ob 3G/LTE verfügbar ist.