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 seitlich gedreht: Sie können ihn nicht drehen und der Fernseher ist auch nicht im Hochformat ausgerichtet. Deine TV-Spiele sollten immer im Querformat angezeigt werden.

Automatischer Modus für geringe Latenzzeit

Bestimmte Displays können eine Grafik-Nachbearbeitung durchführen. Diese Nachverarbeitung verbessert die Grafikqualität, kann aber auch 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.

Um die minimale Nachverarbeitung zu aktivieren oder zu deaktivieren, rufen Sie Window.setPreferMinimalPostProcessing() auf oder setzen Sie das Attribut preferMinimalPostProcessing des Fensters auf true. 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 TV-Controllern findest du unter TV-Controller verwalten. Informationen zur Verwendung von TV-Controllern für Spiele findest du unter Controller für Spiele verwalten.

Tastaturlayouts

Unter Android 13 (API-Level 33) und höher können Sie Tastaturlayouts mit getKeyCodeForKeyLocation() festlegen. Dein Spiel unterstützt beispielsweise die Bewegung mithilfe der WASD-Tasten, dies funktioniert jedoch möglicherweise nicht richtig auf einer AZERTY-Tastatur, bei der sich die A- und die W-Taste an unterschiedlichen Positionen befinden. Sie können die Schlüsselcodes für die erwarteten Schlüssel an bestimmten Positionen abrufen:

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 Dinge, die im Android-Manifest enthalten sein 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, 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 android:required-Attribut nicht auf "true" festlegen. In diesem Fall können Nutzer Ihre App nicht auf Fernsehern installieren.

Weitere Informationen zu Manifesteinträgen findest du 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 gespeicherter Spiele mithilfe der Play-Dienste 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 die Schaltfläche „Startseite“ als Ausstiegsoption zu verwenden, 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 WLAN- als auch Ethernet-Verbindungen prüfen. 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.