TV-Spiele entwickeln

Auf Fernsehbildschirmen werden einige Aspekte berücksichtigt, die für Entwickler von Spielen für Mobilgeräte möglicherweise neu sind. Zu diesen Bereichen zählen die Größe, das Steuerschema und die Tatsache, dass der Player von allen Spielern gleichzeitig angesehen wird.

Display

Wenn du Spiele für Fernsehbildschirme entwickelst, solltest du vor allem zwei Dinge beachten: Entwerfen Sie Ihr Spiel für eine Ausrichtung im Querformat und bieten Sie Unterstützung für niedrige Latenz.

Unterstützung für 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 die Nachverarbeitung von Grafiken durchführen. Diese Nachverarbeitung verbessert die Grafikqualität, kann aber auch die Latenz erhöhen. Neuere Bildschirme, die HDMI 2.1 unterstützen, haben einen automatischen Modus für geringe Latenzzeit (ALLM), der die Latenz durch Deaktivieren der Nachverarbeitung minimiert. Weitere Informationen zu ALLM finden Sie in der HDMI 2.1-Spezifikation. Andere Displays unterstützen möglicherweise einen Spielmodus mit einem ähnlichen Verhalten.

Unter Android 11 und höher kann ein Fenster die Verwendung des automatischen Modus mit niedriger Latenz oder des Spielmodus anfordern (falls verfügbar), indem eine minimale Nachbearbeitung angefordert wird. Dies ist besonders nützlich für Spiele- und Videokonferenzanwendungen, bei denen eine niedrige Latenz wichtiger ist als die bestmögliche Grafik.

Rufen Sie Window.setPreferMinimalPostProcessing() auf oder setzen Sie das Attribut preferMinimalPostProcessing des Fensters auf true, um die minimale Nachverarbeitung zu aktivieren oder zu deaktivieren. Nicht alle Displays unterstützen eine minimale Nachverarbeitung. Um herauszufinden, ob ein bestimmter Bildschirm sie unterstützt, rufen Sie die Methode Display.isMinimalPostProcessingSupported() auf.

Eingabegeräte

Fernseher haben keine Touch-Oberfläche. Umso wichtiger ist es, die Steuerung richtig zu wählen und dafür zu sorgen, dass die Spieler sie intuitiv bedienen und Spaß machen. Der Umgang mit Controllern bringt auch einige andere Probleme mit sich, auf die Sie achten sollten, z. B. das Nachverfolgen mehrerer Controller und die ordnungsgemäße Handhabung von Verbindungsabbrüchen. Alle TV-Apps, einschließlich Spiele, sollten Controller einheitlich unterstützen. 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 kannst du das Tastaturlayout mit getKeyCodeForKeyLocation() bestimmen. Dein Spiel unterstützt beispielsweise die Bewegung mithilfe der WASD-Tasten, dies funktioniert aber 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 und keyDown und keyRight auf KeyEvent.KEYCODE_S bzw. KeyEvent.KEYCODE_D festgelegt. Sie können jetzt Schlüssel-Event-Handler für diese Schlüsselcodes erstellen und das erwartete Verhalten implementieren.

Manifest

Spiele sollten im Android-Manifest einige Besonderheiten enthalten.

Spiel auf dem Startbildschirm anzeigen

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 das Attribut android:isGame im <application> -Tag deines App-Manifests auf "true". Beispiel:

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

Unterstützung für Controller deklarieren

Spielecontroller sind für Nutzer eines Fernsehers möglicherweise nicht verfügbar oder nicht aktiv. Damit Nutzer richtig darüber informiert werden, 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 android:hardware:gamepad-Unterstützung angibst, setze das Attribut android:required nicht auf "true". In diesem Fall können Nutzer deine App nicht auf Fernsehern installieren.

Weitere Informationen zu Manifesteinträgen findest du unter App-Manifest.

Google Play-Spieldienste

Wenn die Google Play-Spieldienste in Ihr Spiel integriert sind, sollten Sie eine Reihe von Aspekten in Bezug auf Erfolge, die Anmeldung und das Speichern von Spielen berücksichtigen.

Erfolge

Ihr Spiel sollte mindestens fünf (erzielbare) Erfolge enthalten. Nur Nutzer, die das Spiel ü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.

Anmelden

Beim Start sollte in Ihrem Spiel versucht werden, den Nutzer anzumelden. Wenn der Spieler die Anmeldung mehrmals hintereinander ablehnt, sollte das Spiel aufhören zu fragen. Weitere Informationen zur Anmeldung findest du unter Anmeldung auf Android implementieren.

Wird gespeichert

Verwenden Sie in den Google Play-Diensten Gespeicherte Spiele, um Ihre gespeicherten Spiele zu speichern. Ihr Spiel sollte gespeicherte Spielstände mit einem bestimmten Google-Konto verknüpfen, um auch geräteübergreifend eindeutig identifizierbar zu sein: Unabhängig davon, ob der Spieler ein Mobilgerät oder einen Fernseher verwendet, sollte das Spiel die gespeicherten Spielstände von demselben Nutzerkonto abrufen können.

Sie sollten auch eine Option in der Benutzeroberfläche Ihres Spiels anbieten, damit der Spieler lokal und in der Cloud gespeicherte Daten löschen kann. Du kannst die Option auf dem Settings-Bildschirm des Spiels platzieren. Weitere Informationen zur Implementierung gespeicherter Spiele mithilfe der Play-Dienste finden Sie unter Gespeicherte Spiele unter Android.

Beenden

Stellen Sie ein einheitliches und offensichtliches UI-Element bereit, mit dem der Nutzer das Spiel anmutig beenden kann. Dieses Element sollte über die Navigationsschaltflächen des Steuerkreuzes zugänglich sein. Das solltest du tun, anstatt dich auf die Home-Taste zu verlassen, um einen Exit zu veranlassen, da diese auf verschiedenen Controllern weder einheitlich noch zuverlässig ist.

Web

Das Surfen im Web in Spielen für Android TV nicht aktivieren. Android TV unterstützt keinen Webbrowser.

Hinweis:Sie können die Klasse WebView für die Anmeldung bei Social-Media-Diensten verwenden.

Netzwerke

Spiele benötigen häufig eine größere Bandbreite, um eine optimale Leistung zu bieten, und viele Nutzer bevorzugen dafür Ethernet-zu-WLAN. Ihre App sollte sowohl eine WLAN- als auch eine Ethernet-Verbindung prüfen. Wenn deine App nur für den Fernseher vorgesehen ist, musst du nicht wie bei einer mobilen App prüfen, ob ein 3G/LTE-Dienst verfügbar ist.