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

Bei der Entwicklung von Spielen für Fernsehbildschirme sollten zwei Dinge beachtet werden: für eine Ausrichtung im Querformat und 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. Immer designen TV-Spiele im Querformat anzeigen.

Automatischer Modus für geringe Latenzzeit

Bestimmte Displays können die Nachverarbeitung von Grafiken durchführen. Durch diese Nachverarbeitung werden Grafiken verbessert, aber die Latenz erhöhen kann. Neuere Bildschirme, die HDMI 2.1 unterstützen, haben eine automatische niedrige Latenzmodus (ALLM), der die Latenz durch Deaktivieren dieser Nachverarbeitung minimiert. Für erhalten Sie in der HDMI 2.1-Spezifikation. Sonstiges Bildschirme können einen Spielmodus mit einem ähnlichen Verhalten unterstützen.

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. Dies gilt insbesondere für nützlich für Spiele- und Videokonferenzanwendungen, bei denen eine niedrige Latenz mit der bestmöglichen 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 eine minimale Nachverarbeitung. um herauszufinden, bestimmte Display unterstützt, rufen Sie die Display.isMinimalPostProcessingSupported()-Methode.

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. Controller handhaben bringt auch einige andere Probleme mit sich, auf die Sie achten sollten, z. B. die Verfolgung mehrerer die Verbindung zwischen den Controllern und der Handhabung reibungslos ab. Alle TV-Apps, einschließlich Spiele, sollten kontinuierlich mit den Controllern zusammenarbeiten. 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() Dein Spiel unterstützt beispielsweise die Bewegung mithilfe der WASD-Tasten, das funktioniert aber möglicherweise nicht richtig auf eine AZERTY-Tastatur, bei der sich die Tasten A und W an unterschiedlichen Positionen befinden. Sie können die Keycodes abrufen, für die Tasten, 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 keyUp bei einer AZERTY-Tastatur 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

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 erscheint, lege die <ph type="x-smartling-placeholder"></ph> android:isGame-Attribut im Manifest deines App-Manifests auf "true" <application> -Tag hinzu. 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. 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 android:hardware:gamepad-Unterstützung angeben, geben Sie nicht die Methode android:required-Attribut zu "true". Wenn Sie dies tun, können Nutzer um deine App auf Fernsehern zu 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 Spiel steuert mit einem unterstützten Eingabegerät Erfolge erzielen können. 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 implementieren auf Android-Geräte

Wird gespeichert

Über Gespeicherte Spiele in den Google Play-Diensten den Spielstand. 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, mit der der Spieler Daten lokal löschen und in der Cloud gespeicherte Daten. Du kannst die Option auf dem Settings-Bildschirm des Spiels platzieren. Für 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 sollte über die Navigationsschaltflächen auf dem Steuerkreuz 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

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 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. Deine App sollte sowohl WLAN- als auch Ethernet-Verbindungen prüfen Verbindungen. 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.