Spiele für alle Bildschirme entwickeln

Bei der Entwicklung eines Spiels für Android ist es wichtig, die Vielfalt Möglichkeiten des Spielers und Anpassung an die Echtzeit des Spielers Anforderungen an die Interaktion. Durch die Unterstützung verschiedener Spielererfahrungen steigerst du Gameplay-Flexibilität, die dir dabei hilft, die Reichweite deines Spiels zu erhöhen.

Zu den spezifischen Unterschieden bei der Nutzung des Players gehören folgende:

  • Geräteformfaktoren:Smartphones bieten die traditionelle Android-Version kann man auch mit Spielen auf anderen Formfaktoren interagieren. Auf ChromeOS-Geräten kann ein Android-Container ausgeführt werden, in dem Ihr Spiel angezeigt wird. Tablets auf denen Android verschiedene Fidelity-Level unterstützt. Android TV Geräte mit mehr Details und immersiveren Erlebnissen. Spieler können Simulieren Sie die Umgebung mit einem Mehrfenstermodus mithilfe eines Displayerweiterungstools. Und wenn Mit faltbaren Geräten können Spieler die Größe des Bildschirms während des Spiels ändern. Sitzung.
  • Interaktionsmethoden: Spieler können sich aktiv einbringen, indem sie die Bildschirm, aber auch Maus, Touchpad, Tastatur oder Controller . Außerdem sind Tools für Displaynetzwerk-Erweiterungen und faltbare können Spieler Ihr Spiel auf einem größeren Bildschirm erleben, wodurch sich wie Gameplay-Sitzungen und komplexere Benutzeroberflächen möglich sind.
  • Hardware-Unterstützung: Einige Android-Geräte haben keine Hardware, wie die Rückkamera, ein GPS-Gerät und Netzwerkverbindung. Ihr Spiel sollte sich an die verfügbare Hardware anpassen und problemlos mit Situationen umgehen, in denen bestimmte Funktionen nicht verfügbar sind.

In diesem Leitfaden findest du Best Practices zur Entwicklung deines Spiels für verschiedene Bildschirmtypen und Nutzerinteraktionen. Dieser Leitfaden enthält auch Vorschläge dein Spiel zu entwerfen und eine effektive Teststrategie zu entwickeln.

Best Practices für das Spieledesign

Halte dich bei der Planung des Designs und der Architektur deines Spiels an die Best Practices die in den folgenden Abschnitten beschrieben werden.

Manuell auf Konfigurationsänderungen reagieren

Wenn das Android-System eine Konfigurationsänderung erkennt, z. B. eine Änderung der Bildschirmgröße, Bildschirmausrichtung oder Eingabemethode hat, wird das System standardmäßig neu gestartet. der aktuellen Aktivität. Um den Status innerhalb einer App oder eines Spiels beizubehalten, Standardaufrufe onSaveInstanceState() bevor es neu startet und onRestoreInstanceState() nachdem er neu gestartet wurde. Bei diesem Vorgang muss die Aktivität jedoch alle zugehörige Dienste und Ressourcen. Weitere Informationen zu diesem Standardverhalten finden Sie in der Anleitung zur Konfiguration Änderungen.

Bei einer typischen Spielsitzung werden mehrere Konfigurationsänderungen vorgenommen. Wenn Ihr Spiel überlässt das System jede Konfigurationsänderung, wird die Spielszene zerstört und das Spiel immer wieder neu gestartet. Aus diesem Grund Sie sollten diese Konfigurationsänderungen dringend selbst vornehmen für Ihr Spiel.

Wie Sie Ihrem Spiel diese Logik für Konfigurationsänderungen hinzufügen, erfahren Sie in der Abschnitt zum Erstellen einer benutzerdefinierten Konfigurationsänderung Handler.

Flexible Architektur erstellen

Damit dein Spiel auf möglichst vielen Geräten unterstützt wird, solltest du Folgendes beachten: Best Practices:

  • Stelle Android App Bundles anstelle einzelner APKs bereit. Android-App Mit Bundles können Sie Artefakte verschiedener Auflösungen und verschiedenen Architekturmodellen wie x86 und ARM in einem einzigen Artefakt. Und noch besser: Android App Bundles unterstützen höhere Größenbeschränkungen für Spiel kann jedes Basis-APK bis zu 150 MB groß sein und das Bundle selbst Gigabyte groß sein.
  • Unterstützung für x86-Architekturen hinzufügen. Mit diesem Schritt wird die Leistung auf Geräten, die ARM nicht unterstützen, Anweisungen ausführen, ohne sie vorher übersetzen zu müssen.

Unterstützung für Vulkan hinzufügen

Wenn du Vulkan unterstützt, kannst du mit deinem Spiel bessere Ergebnisse erzielen Grafikleistung. Die meisten Geräte unterstützen diese Grafik-API.

Benutzerdefinierte Konfigurationsänderungs-Handler erstellen

Um die Arten von Konfigurationsänderungen zu deklarieren, die Ihr Spiel selbst übernimmt, android:configChanges jedem <activity>-Element in Ihrem Manifest, das einen Bildschirm darstellt, oder komplexe Schnittstelle.

Das folgende Code-Snippet zeigt, wie Sie erklären, dass Ihr Spiel der Bildschirmgröße, der Bildschirmausrichtung und der Eingabemethoden:

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

Wenn die deklarierten Konfigurationsänderungen auftreten, ruft das System jetzt eine eine andere Methode wählen, onConfigurationChanged() Fügen Sie bei dieser Methode Logik hinzu, um die UI Ihres Spiels zu aktualisieren:

Bildschirmkonfigurationsänderungen verarbeiten

Ihr Spiel verarbeitet Änderungen der Bildschirmgröße und -ausrichtung manuell, Sie nehmen die Werte screenSize und orientation jeweils in eine android:configChanges . Mit diesen neuen Werten können Sie den Inhalt und Player-Eingabebereiche. Für Anleitungen zum Entwerfen des Layouts Ihres Spiels, einfacher zu aktualisieren, finden Sie in der Anleitung zur Unterstützung Größen.

Verwende in der Implementierung von onConfigurationChanged() deines Spiels die übergebenen Objekt Configuration und das Display-Objekt des Fenstermanagers die aktualisierten Werte für Bildschirmgröße und Bildschirmausrichtung zu bestimmen, .

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

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 sich die Position eines faltbaren Geräts ändert, ändert sich auch die Konfiguration. auch wenn Ihre App im Vollbildmodus ausgeführt wird. Dies kann dazu führen, dass Ihre App Änderungen der Bildschirmgröße oder der Pixelgröße wenn der Nutzer das Gerät auf- oder zuklappt, während das Spiel läuft.

Spielspezifische Bildschirmqualitäten

In den folgenden Abschnitten wird beschrieben, wie Sie die Reaktion Ihres Spiels auf den Bildschirm anpassen können. Größe oder Bildschirmausrichtung ändert sich je nach Qualität Ihres Spiels:

Vollbildmodus

Auf einigen Plattformen wie ChromeOS können Android-Apps und -Spiele standardmäßig anpassbar. Wenn Ihr Spiel immer im Vollbildmodus laufen soll, kann das android:resizeableActivity in einem Ihrer <activity>-Elemente auf false setzen, wie in den folgenden Code-Snippet hinzu:

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

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

Bildschirmausrichtung

Wenn die Sensoren eines Geräts eine bestimmte Ausrichtung haben, einen Wert für android:screenOrientation Zoll wie im folgenden Code-Snippet dargestellt. Diese Einstellung hilft Ihnen, verhindert, dass eine Szene in deinem Spiel unerwartet auf den Kopf gestellt wird.

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

Gerätespezifische Bildschirmqualitäten

In den folgenden Abschnitten wird der Umgang mit bildschirmbasierten Konfigurationsänderungen beschrieben angesichts der besonderen Eigenschaften, die manche Geräte haben.

Seitenverhältnis

Einige Geräte unterstützen unterschiedliche Seitenverhältnisse. Faltbare Geräte sind beispielsweise die im zusammengeklappten Zustand ein Seitenverhältnis von 21:9 unterstützen. Verarbeitung für diese potenzielle Seitenverhältnisvielfalt verwenden, führen Sie mindestens einen der folgenden Schritte aus:

  • Die App muss auf Android 8.0 (API-Level 26) oder höher ausgerichtet sein.
  • Passe die Spielumgebung und -oberfläche deines Spiels an die Größe an. Festlegen android:resizeableActivity bis true auf Geräten mit Android 7.0 (API-Level 24) und höher.
  • Deklariere ein maximal unterstütztes Seitenverhältnis. In einer <meta-data> Attribut verknüpft für dein Spiel befindet, setze android.max_aspect auf 2.4, wie unten gezeigt Code-Snippet einzufügen. Beachten Sie jedoch, dass die Seitenverhältnisse damit das Spiel erscheint, Letterbox-Bild innerhalb eines Displays.

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

Mehrere Aktivitäten gleichzeitig sichtbar

Viele moderne Geräte unterstützen eine Vielzahl von Bildschirmlayouts, einschließlich Splitscreen, Bild-im-Bild-Modus und große Anzeigebereiche. Wenn Sie eines dieser Layouts verwenden, kann das System mehrere Aktivitäten gleichzeitig sichtbar machen.

Auf Geräten mit Android 9 (API-Level 28) oder höher können alle sichtbare Aktivitäten, die gleichzeitig fortgesetzt werden sollen. Damit dieses Verhalten funktionieren, müssen jedoch sowohl Ihr Spiel als auch der OEM des Geräts Funktionalität. Du kannst in deinem Spiel Unterstützung hinzufügen, indem du android.allow_multiple_resumed_activities bis true im Manifest deines Spiels angegeben haben, Dies wird im folgenden Snippet gezeigt:

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

Du kannst dein Spiel dann auf verschiedenen Geräten testen, um herauszufinden, OEM-Unterstützung, die für die ordnungsgemäße Funktion mehrerer Fortsetzungen erforderlich ist.

Weitere Informationen zur Konfiguration Ihres Spiels, damit es als Teil eines Mehrfenstermodus, siehe Anleitung zum Hinzufügen des Mehrfenstermodus Support.

Mit verschiedenen Arten von Interaktionsmodellen umgehen

Dein Spiel verarbeitet die Tastaturpräsenz und die Tastaturverfügbarkeit manuell, wenn Sie nehmen die Werte keyboard und keyboardHidden jeweils in eine android:configChanges . Mit diesen neuen Werten kannst du den primären Eingabemodus deines Spiels aktualisieren .

Wenn du dein Spiel so konfigurierst, dass mehrere Arten von Nutzereingaben unterstützt werden, achte darauf, dass die im Hinterkopf:

  • Erkennen von Eingabemethoden anstelle einzelner Geräte Diese Einstellung macht es das Spielerlebnis zu verbessern, ohne sich zu sehr auf die die der Player möglicherweise hat.
  • Nehmen Sie das Attribut keyboardHidden in die Liste der manuell verarbeiteten Konfigurationsänderungen. So kann Ihr Spiel im Blick behalten, physisch mit dem Gerät verbunden, aber unbrauchbar ist.
  • Verfügbare Eingabemethoden ermitteln Rufen Sie dazu unter getInputDeviceIds() beim Start des Spiels und nach jeder Konfigurationsänderung.

    Häufig können Sie festlegen, wie der Spieler mit Ihrem Spiel interagieren möchte. je nach bevorzugtem Eingabegerät:

    • Spieler verwenden in der Regel eine Tastatur oder einen Controller, um eine schnelle Schaltflächensequenzen.
    • Spieler verwenden in der Regel einen Touchscreen oder ein Touchpad für komplexere Aufgaben. Gesten verwenden.
    • Spieler verwenden in der Regel eine Maus, um Eingaben mit höherer Genauigkeit vorzunehmen.

In den folgenden Abschnitten finden Sie Best Practices für bestimmte Arten von Eingaben. Geräte.

Tastatur

Berücksichtige beim Erstellen eines Tastaturlayouts für dein Spiel, wie der Spieler navigiert. in einer bestimmten Szene ansehen und wie sie mit den Einstellungen des Spiels interagieren.

Die WASD- oder Pfeiltasten eignen sich in der Regel am besten zur Steuerung der Zeichenbewegung. Außerdem ist es am besten, jeder wichtigen Aktion oder Fähigkeit eine bestimmte Taste zuzuweisen. die ein steuerbarer Charakter in deinem Spiel spielen kann. Um die solltet ihr Unterstützung für benutzerdefinierte Tastenbindungen in eurem Spiel hinzufügen.

Die Spieler sollten auch die Menüs Ihres Spiels öffnen und durch sie navigieren können. mit der Tastatur. Die Taste Esc ist eine gängige Zuordnung zum Pausieren einer Szene und mit dem Menü des Spiels.

Weitere Informationen zur Unterstützung der Tastatureingabe in deinem Spiel findest du in der Anleitung zur Unterstützung der Tastaturnavigation sowie im Leitfaden zur Verwendung der Tastatur Aktionen.

Controller

Weitere Informationen zur Steuerung der Controller-Eingabe in deinem Spiel findest du in der Anleitung zur Unterstützung von Controllern.

Maus oder Touchpad

Wenn Ihr Spiel die Spielereingabe über Maus oder Touchpad unterstützt, beachten Sie, Spieler interagieren auf andere Weise mit dem Gerät als mit dem Spiel. Es ist dass bei der Anforderung der Zeigererfassung alle Mauseingaben direkt zu deinem Spiel. Sobald Ihr Spiel die nötigen Informationen hat, Release-Pointer-Capture, sodass die Spieler wieder die Standard-Maus steuern können. .

Auf Geräten mit Android 8.0 (API-Level 26) und höher können Sie die Maus verwenden. Capture API zur Unterstützung des Zeigererfassungsprozesses. Bei Spielen, die auf Eingabe mit hoher Genauigkeit können Sie die aktuellen Koordinaten des Zeigers abrufen, indem Sie getX() und getY()-Methoden.

Weitere Informationen zur Unterstützung der Maus- und Touchpad-Eingabe in deinem Spiel findest du im Leitfaden zum Tracken von Berührungen und Zeigern Bewegungen sowie in diesem Leitfaden Multi-Touch-Gesten.

Spiel testen

Testen Sie vor dem Start Ihres Spiels, wie es auf Konfigurationsänderungen reagiert, indem Sie die in den folgenden Abschnitten beschriebenen Schritte ausführen.

Testplan aktualisieren

Berücksichtige bei der Prüfung der Funktionalität deines Spiels die folgenden Testfälle:

  • Minimieren und maximieren Sie das Fenster, das Ihr Spiel enthält. (Gilt nicht, wenn Ihr Spiel immer im Vollbildmodus ist.)
  • Bildschirmgröße ändern.
  • Bildschirmausrichtung ändern (Dies gilt nicht, wenn dein Spiel eine feste Ausrichtung.)
  • Schließen Sie Eingabegeräte wie Tastaturen und Mäuse an und trennen Sie die Verbindung.
  • Führen Sie mehrere Fortsetzungen durch, sofern Ihr Spiel dies unterstützt.

Wir empfehlen Ihnen auch, das Qualitätskontrollsystem Ihres Spiels zu aktualisieren, für eine größere Vielfalt von Spielererlebnissen zu optimieren.

Best Practices zum Testen deines Spiels findest du in den Grundlagen der Testleitfaden.

Test- und Debugging-Tools verwenden

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