TV-Spiele entwickeln

Der Fernsehbildschirm zeigt eine Reihe von Aspekten, die in Spielen für Mobilgeräte neu sein könnten. zu entwickeln. Zu diesen Bereichen zählen die Größe, das Steuerungsschema und die Tatsache, dass alle Spieler sie sich 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. Immer designen TV-Spiele im Querformat anzeigen.

Automatischer Modus für geringe Latenz

Bestimmte Displays können die Nachverarbeitung von Grafiken durchführen. Durch diese Nachverarbeitung werden Grafiken verbessert, aber die Latenz erhöhen kann. 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 den automatischen Modus für geringe Latenzzeit oder ein Spiel anfordern verwendet werden, falls verfügbar, indem eine 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(), oder legen Sie die preferMinimalPostProcessing auf true setzen. 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 Touchoberfläche, daher ist es noch wichtiger, die Steuerung richtig einzustellen und damit die Spieler sie intuitiv und nutzungsfreundlich finden. 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 finden Sie unter TV verwalten finden Sie weitere Informationen zur Verwendung von TV-Controllern und die Verarbeitung von Controllern für Spiele Informationen zur Verwendung von TV-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:

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)
    }
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 ist auf KeyEvent.KEYCODE_Q festgelegt, während keyDown und keyRight auf KeyEvent.KEYCODE_S festgelegt sind bzw. KeyEvent.KEYCODE_D. Sie können jetzt Schlüssel-Event-Handler für diese 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 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

Spielecontroller sind für Nutzer eines Fernsehers möglicherweise nicht verfügbar oder nicht aktiv. Um die richtigen Nutzer darüber zu informieren, dass Ihr Spiel einen Controller unterstützt, müssen Sie den folgenden Eintrag in App-Manifest ein:

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

Hinweis: Wenn Sie die Unterstützung von android:hardware:gamepad 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 Ihr Spiel die Google Play-Spieldienste integriert, sollten Sie eine Reihe von Überlegungen zu Erfolgen, der Anmeldung und dem Speichern von Spielen.

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 Erfolge und deren Implementierung finden Sie unter Erfolge in Android.

Anmelden

Beim Start sollte in Ihrem Spiel versucht werden, den Nutzer anzumelden. Wenn der Spieler die Anmeldung nach mehreren sollte das Spiel aufhören zu 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 gespeicherte Spielstände an ein bestimmtes Google-Konto binden, damit auch geräteübergreifend eindeutig identifiziert werden können: Egal, ob der Spieler ein Mobiltelefon oder einen Fernseher verwendet, Das Spiel sollte in der Lage sein, die gespeicherten Spieldaten vom selben Nutzerkonto abzurufen.

Sie sollten auch eine Option in der Benutzeroberfläche Ihres Spiels anbieten, in der Cloud gespeicherte Daten. Du kannst die Option auf dem Bildschirm Settings des Spiels platzieren. Weitere Informationen zur Implementierung gespeicherter Spiele mit Play-Diensten 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 Navigationstasten des D-Pads zugänglich sein. Dies sollten Sie tun, anstatt sich auf die Schaltfläche zum Beenden der Home-Taste, da diese auf verschiedenen Controllern weder einheitlich noch zuverlässig ist.

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 folgenden Fällen verwenden: Social-Media-Dienste.

Netzwerke

Spiele benötigen häufig eine größere Bandbreite, um eine optimale Leistung zu bieten, und viele Nutzer bevorzugen Ethernet zu WLAN für diese Leistung. Ihre App sollte sowohl nach WLAN- als auch nach Ethernetverbindungen suchen. Wenn Ihre App nur für den Fernseher gedacht ist, müssen Sie nicht prüfen, ob ein 3G/LTE-Dienst verfügbar ist. für eine mobile App.