Spiele für alle Bildschirme entwickeln

Bei der Entwicklung eines Spiels für Android ist es wichtig, die Vielfalt der möglichen Spielerlebnisse zu berücksichtigen und sich an die Echtzeit-Interaktionsanforderungen eines Spielers anzupassen. Wenn Sie verschiedene Spielerlebnisse unterstützen, erhöhen Sie die Flexibilität des Gameplays und können die Reichweite Ihres Spiels steigern.

Die Spielerfahrung unterscheidet sich unter anderem in folgenden Punkten:

  • Geräteformfaktoren:Smartphones bieten zwar die traditionelle Android-Geräteumgebung, aber es ist auch möglich, Spiele auf anderen Formfaktoren zu spielen. Auf ChromeOS-Geräten kann ein Android-Container ausgeführt werden, in dem Ihr Spiel angezeigt wird. Tablets, auf denen Android ausgeführt werden kann, unterstützen verschiedene Detaillierungsgrade. Android TV-Geräte unterstützen detailreichere und immersivere Erlebnisse. Spieler können mit einem Display-Erweiterungstool eine Umgebung mit mehreren Fenstern simulieren. Bei Faltgeräten können Spieler die Größe des Bildschirms während einer Spielsitzung ändern.
  • Interaktionsmethoden:Spieler können Eingaben über den Touchscreen eines Geräts machen, aber auch eine Maus, ein Touchpad, eine Tastatur oder einen Controller verwenden. Außerdem können Spieler Ihr Spiel dank der Verfügbarkeit von Tools zur Display-Erweiterung und faltbaren Geräten auf einem größeren Bildschirm spielen, was längere Spielsitzungen und komplexere Benutzeroberflächen ermöglicht.
  • Hardwareunterstützung:Einige Android-Geräte haben keine Hardware, die für ein tragbares Gerät typisch ist, z. B. eine nach hinten gerichtete Kamera, ein GPS und eine Netzwerkverbindung. Dein Spiel sollte sich an die verfügbare Hardware anpassen und Situationen, in denen bestimmte Funktionen nicht verfügbar sind, angemessen behandeln.

In diesem Leitfaden werden Best Practices für die Entwicklung Ihres Spiels für verschiedene Arten von Bildschirmen und Nutzerinteraktionen vorgestellt. Außerdem finden Sie in diesem Leitfaden Vorschläge für das Design Ihres Spiels und die Entwicklung einer effektiven Teststrategie.

Best Practices für das Spieldesign

Beachten Sie beim Planen des Designs und der Architektur Ihres Spiels die in den folgenden Abschnitten beschriebenen Best Practices.

Manuell auf Konfigurationsänderungen reagieren

Wenn das Android-System eine Konfigurationsänderung erkennt, z. B. eine Änderung der Bildschirmgröße, der Bildschirmausrichtung oder der Eingabemethode, wird die aktuelle Aktivität standardmäßig neu gestartet. Um den Status in einer App oder einem Spiel beizubehalten, ruft die Aktivität standardmäßig onSaveInstanceState() vor dem Neustart und onRestoreInstanceState() nach dem Neustart auf. Dazu müssen jedoch alle zugehörigen Dienste und Ressourcen neu geladen werden. Weitere Informationen zum Standardverhalten

Eine typische Spielsitzung durchläuft mehrere Konfigurationsänderungen. Wenn Ihr Spiel das System jede Konfigurationsänderung verarbeiten lässt, wird die Szene Ihres Spiels immer wieder zerstört und neu gestartet, was die Leistung Ihres Spiels beeinträchtigt. Aus diesem Grund empfehlen wir dringend, diese Konfigurationsänderungen selbst in Ihrem Spiel vorzunehmen.

Informationen zum Hinzufügen dieser Logik für Konfigurationsänderungen zu Ihrem Spiel

Flexible Architektur erstellen

So fügen Sie Unterstützung für Ihr Spiel auf möglichst vielen Geräten hinzu:

  • Android App Bundles anstelle einzelner APKs bereitstellen: Mit Android-App-Bundles können Sie Artefakte mit unterschiedlichen Auflösungen und Architekturmodellen wie x86 und ARM in einem einzigen Artefakt zusammenfassen. Android App-Bundles unterstützen höhere Größenbeschränkungen für Ihr Spiel. Jedes Basis-APK kann bis zu 150 MB groß sein und das Bundle selbst kann viele Gigabyte groß sein.
  • Unterstützung für x86-Architekturen hinzufügen: Dieser Schritt verbessert die Leistung Ihres Spiels auf Geräten, die ARM nicht unterstützen, da diese Geräte jetzt Anweisungen ausführen können, ohne sie zuerst übersetzen zu müssen.

Unterstützung für Vulkan hinzufügen

Durch die Unterstützung von Vulkan kann Ihr Spiel eine höhere Grafikleistung erzielen. Die meisten Geräte unterstützen diese Grafik-API.

Benutzerdefinierte Handler für Konfigurationsänderungen erstellen

Wenn Sie die Arten von Konfigurationsänderungen deklarieren möchten, die Ihr Spiel selbst verarbeitet, fügen Sie jedem <activity>-Element in Ihrem Manifest, das einen Bildschirm oder eine komplexe Benutzeroberfläche darstellt, das Attribut android:configChanges hinzu.

Das folgende Code-Snippet zeigt, wie Sie deklarieren, dass Ihr Spiel Änderungen bei Bildschirmgröße, Bildschirmausrichtung und Eingabemethode berücksichtigt:

<activity ...
    android:configChanges="screenSize|orientation|keyboard|keyboardHidden">
</activity>

Wenn die deklarierten Konfigurationsänderungen eintreten, ruft das System jetzt eine andere Methode auf: onConfigurationChanged(). Fügen Sie in dieser Methode Logik hinzu, um die Benutzeroberfläche Ihres Spiels zu aktualisieren:

Umgang mit Änderungen der Bildschirmkonfiguration

Ihr Spiel verarbeitet Änderungen der Bildschirmgröße und ‑ausrichtung manuell, wenn Sie die Werte screenSize bzw. orientation in ein android:configChanges-Attribut einfügen. Sie können diese neuen Werte verwenden, um die Inhalte und die Bereiche für die Eingabe durch den Nutzer in Ihrer Szene zu aktualisieren. Weitere Informationen zum Anpassen des Layouts Ihres Spiels für verschiedene Bildschirmgrößen

Verwenden Sie in der Implementierung von onConfigurationChanged() in Ihrem Spiel das übergebene Configuration-Objekt und das Display-Objekt des Fenstermanagers, um die aktualisierten Werte für die Bildschirmgröße bzw. die Bildschirmausrichtung zu ermitteln.

Das folgende Code-Snippet zeigt, wie Sie die aktualisierte Bildschirmgröße und ‑ausrichtung Ihres Spiels abrufen:

Kotlin

override fun onConfigurationChanged(newConfig: Configuration) {
    super.onConfigurationChanged(newConfig)
    val density: Float = resources.displayMetrics.density
    val newScreenWidthPixels = (newConfig.screenWidthDp * density).toInt()
    val newScreenHeightPixels = (newConfig.screenHeightDp * density).toInt()

    // Get general orientation; either Configuration.ORIENTATION_PORTRAIT or
    // Configuration.ORIENTATION_LANDSCAPE.
    val newScreenOrientation: Int = newConfig.orientation

    // Get general rotation; one of: ROTATION_0, ROTATION_90, ROTATION_180,
    // or ROTATION_270.
    val newScreenRotation: Int = windowManager.defaultDisplay.rotation
}

Java

@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
    float density = getResources().getDisplayMetrics().density;
    int newScreenWidthPixels = (int) (newConfig.screenWidthDp * density);
    int newScreenHeightPixels = (int) (newConfig.screenHeightDp * density);

    // Get general orientation; either Configuration.ORIENTATION_PORTRAIT or
    // Configuration.ORIENTATION_LANDSCAPE.
    int newScreenOrientation = newConfig.orientation;

    // Get general rotation; one of: ROTATION_0, ROTATION_90, ROTATION_180,
    // or ROTATION_270.
    int newScreenRotation = getWindowManager().getDefaultDisplay()
            .getRotation();
}

Wenn Sie die Ausrichtung eines faltbaren Geräts ändern, ändert sich auch die Konfiguration, selbst wenn Ihre App im Vollbildmodus ausgeführt wird. Daher muss Ihre App möglicherweise Änderungen an der Bildschirmgröße oder Pixeldichte verarbeiten, wenn der Nutzer das Gerät während des Spiels zusammen- oder aufklappt.

Bildschirmqualitäten für Spiele

In den folgenden Abschnitten wird beschrieben, wie Sie anpassen können, wie Ihr Spiel auf Änderungen der Bildschirmgröße oder ‑ausrichtung reagiert, je nach den Eigenschaften Ihres Spiels:

Vollbildmodus

Auf einigen Plattformen wie ChromeOS können Android-Apps und ‑Spiele standardmäßig in einem Fenster geöffnet und in der Größe angepasst werden. Wenn Ihr Spiel immer im Vollbildmodus ausgeführt werden soll, können Sie das Attribut android:resizeableActivity in einem Ihrer <activity>-Elemente auf false festlegen, wie im folgenden Code-Snippet gezeigt:

<activity ...
    android:resizeableActivity="false">
</activity>

Sie können das Attribut android:resizeableActivity auch auf false setzen, um zu verhindern, dass größenbasierte Konfigurationsänderungen vorgenommen werden. Sofern Ihr Spiel nicht immer im Vollbildmodus ausgeführt wird, sollten Sie dieses Attribut jedoch nur als vorübergehende Lösung für Testzwecke hinzufügen.

Bildschirmausrichtung

Wenn Ihr Spiel von einer bestimmten Ausrichtung der Sensoren eines Geräts abhängt, geben Sie in der Aktivität Ihres Spiels einen Wert für android:screenOrientation an, wie im folgenden Code-Snippet gezeigt. Diese Einstellung kann verhindern, dass eine Szene in Ihrem Spiel unerwartet auf den Kopf gestellt wird.

<activity ...
    android:screenOrientation="landscape">
</activity>

Gerätespezifische Bildschirmqualitäten

In den folgenden Abschnitten wird beschrieben, wie Sie bildschirmbasierte Konfigurationsänderungen bei bestimmten Gerätequalitäten vornehmen.

Seitenverhältnis

Einige Geräte unterstützen unterschiedliche Seitenverhältnisse. Faltbare Geräte sind beispielsweise so konzipiert, dass sie im zusammengeklappten Zustand ein Seitenverhältnis von 21:9 unterstützen. Um dieser potenziellen Vielfalt im Seitenverhältnis Rechnung zu tragen, sollten Sie mindestens eine der folgenden Maßnahmen ergreifen:

  • Ausrichtung auf Android 8.0 (API-Level 26) oder höher
  • Szene und Benutzeroberfläche des Spiels anpassen Setzen Sie android:resizeableActivity auf true auf Geräten mit Android 7.0 (API‑Level 24) und höher.
  • Maximal unterstütztes Seitenverhältnis deklarieren Legen Sie in einem <meta-data>-Attribut, das mit Ihrem Spiel verknüpft ist, android.max_aspect auf 2.4 fest, wie im folgenden Code-Snippet gezeigt. Beachte jedoch, dass das Spiel auf einem Display letterboxed dargestellt wird, wenn das Seitenverhältnis größer als das von dir angegebene ist.

    <application>
    <meta-data android:name="android.max_aspect"
               android:value="2.4" />
    </application>

Mehrere Aktivitäten gleichzeitig sichtbar

Viele moderne Geräte unterstützen verschiedene Bildschirmlayouts, darunter Split-Screen, Bild-im-Bild und große Anzeigebereiche. Wenn Sie eines dieser Layouts verwenden, kann das System mehrere Aktivitäten gleichzeitig anzeigen.

Auf Geräten mit Android 9 (API-Level 28) oder höher können alle oben sichtbaren Aktivitäten gleichzeitig fortgesetzt werden. Damit dieses Verhalten funktioniert, müssen sowohl Ihr Spiel als auch der OEM des Geräts die Funktion aktivieren. Sie können die Unterstützung in Ihrem Spiel hinzufügen, indem Sie android.allow_multiple_resumed_activities in Ihrem Spielmanifest auf true setzen, wie im folgenden Snippet gezeigt:

<application>
    <meta-data android:name="android.allow_multiple_resumed_activities"
               android:value="true" />
</application>

Anschließend können Sie Ihr Spiel auf verschiedenen Geräten testen, um herauszufinden, welche Geräte die OEM-Unterstützung bieten, die für die ordnungsgemäße Funktion von Multi-Resume erforderlich ist.

Weitere Informationen zum Konfigurieren Ihres Spiels für die Anzeige im Mehrfenstermodus finden Sie in der Anleitung zum Hinzufügen von Mehrfenstermodus-Unterstützung.

Verschiedene Arten von Interaktionsmodellen verarbeiten

Ihr Spiel verarbeitet das Vorhandensein und die Verfügbarkeit der Tastatur manuell, wenn Sie die Werte keyboard bzw. keyboardHidden in ein android:configChanges-Attribut einfügen. Sie können diese neuen Werte verwenden, um die primäre Eingabemethode Ihres Spiels zu aktualisieren.

Beachten Sie beim Konfigurieren Ihres Spiels für die Unterstützung mehrerer Arten von Nutzereingaben Folgendes:

  • Eingabemethoden statt einzelner Geräte erkennen: So lässt sich das Spielerlebnis leichter verbessern, ohne sich zu sehr auf das jeweilige Gerät des Spielers konzentrieren zu müssen.
  • Fügen Sie das Attribut keyboardHidden in Ihre Liste der manuell behandelten Konfigurationsänderungen ein. So kann Ihr Spiel nachverfolgen, wann eine Tastatur physisch mit dem Gerät verbunden, aber nicht verwendbar ist.
  • Verfügbare Eingabemethoden ermitteln Rufen Sie dazu getInputDeviceIds() beim Spielstart und nach jeder Konfigurationsänderung auf.

    Anhand des bevorzugten Eingabegeräts können Sie oft erkennen, wie der Spieler mit Ihrem Spiel interagieren möchte:

    • Spieler verwenden in der Regel eine Tastatur oder einen Controller, um schnelle Tastenkombinationen auszuführen.
    • Spieler verwenden in der Regel einen Touchscreen oder ein Touchpad, um komplexere Gesten auszuführen.
    • Spieler verwenden in der Regel eine Maus, um präzisere Eingaben zu machen.

In den folgenden Abschnitten finden Sie Best Practices für bestimmte Arten von Eingabegeräten.

Tastatur

Berücksichtigen Sie beim Erstellen eines Tastaturlayouts für Ihr Spiel, wie der Spieler durch eine bestimmte Szene navigiert und wie er mit den Einstellungen Ihres Spiels interagiert.

Die WASD-Tasten oder die Pfeiltasten eignen sich in der Regel am besten, um die Bewegung der Figur zu steuern. Außerdem ist es am besten, jeder wichtigen Aktion oder Fähigkeit, die eine steuerbare Figur in Ihrem Spiel ausführen kann, eine bestimmte Taste zuzuweisen. Um das Spielerlebnis zu optimieren, sollten Sie in Ihrem Spiel Unterstützung für benutzerdefinierte Tastenbelegungen hinzufügen.

Spieler sollten auch in der Lage sein, die Menüs Ihres Spiels zu öffnen und mit der Tastatur darin zu navigieren. Die Esc-Taste wird häufig verwendet, um eine Szene zu pausieren und das Spielmenü aufzurufen.

Weitere Informationen zur Unterstützung der Tastatureingabe in Ihrem Spiel finden Sie im Leitfaden zur Unterstützung der Tastaturnavigation sowie im Leitfaden zum Umgang mit Tastaturaktionen.

Controller

Weitere Informationen zum Verarbeiten von Controller-Eingaben in deinem Spiel findest du in diesem Leitfaden.

Maus oder Touchpad

Wenn Ihr Spiel die Eingabe über eine Maus oder ein Touchpad unterstützt, sollten Sie bedenken, dass Nutzer das Gerät auch für andere Zwecke als zum Spielen Ihres Spiels verwenden. Wenn Sie die Zeigererfassung anfordern, werden alle Mauseingaben an Ihr Spiel weitergeleitet. Wenn Ihr Spiel die erforderlichen Informationen erhalten hat, sollten Sie die Zeigererfassung wieder freigeben, damit die Spieler die Maus wieder wie gewohnt verwenden können.

Auf Geräten mit Android 8.0 (API-Level 26) und höher können Sie die Mouse Capture API verwenden, um den Prozess der Zeigererfassung zu unterstützen. In Spielen, die auf hochpräzise Eingaben reagieren, können Sie die aktuellen Koordinaten des Zeigers abrufen, indem Sie die Methoden getX() und getY() aufrufen.

Weitere Informationen zum Hinzufügen von Unterstützung für Mauseingaben und Touchpad-Eingaben in Ihrem Spiel finden Sie im Leitfaden zum Erfassen von Touch- und Zeigerbewegungen sowie im Leitfaden zum Verarbeiten von Multitouch-Gesten.

Spiel testen

Bevor Sie Ihr Spiel veröffentlichen, sollten Sie testen, wie es auf Konfigurationsänderungen reagiert. Führen Sie dazu die in den folgenden Abschnitten beschriebenen Schritte aus.

Testplan aktualisieren

Berücksichtigen Sie beim Validieren der Funktionen Ihres Spiels die folgenden Testläufe:

  • Minimieren und maximieren Sie das Fenster, in dem sich Ihr Spiel befindet. (Gilt nicht, wenn Ihr Spiel immer im Vollbildmodus ausgeführt wird.)
  • Displaygröße ändern
  • Bildschirmausrichtung ändern Gilt nicht, wenn Ihr Spiel eine feste Ausrichtung hat.
  • Eingabegeräte wie Tastaturen und Mäuse anschließen und trennen
  • Führe Multi-Resume aus, wenn dein Spiel dies unterstützt.

Außerdem sollten Sie das Qualitätssicherungssystem Ihres Spiels aktualisieren, damit Sie es für eine größere Vielfalt an Spielerlebnissen optimieren können.

Best Practices zum Testen Ihres Spiels finden Sie im Leitfaden zu den Grundlagen des Testens.

Tools zum Testen und zur Fehlerbehebung verwenden

Sie können Tests mit verschiedenen Tools durchführen, die von der Plattform unterstützt werden: