Unterstützung mehrerer Formfaktoren und Bildschirmgrößen

Android-Geräte sind in verschiedenen Formfaktoren und Bildschirmgrößen erhältlich. Zu den häufigsten Kategorien gehören:

  • Smartphones
  • Tablets
  • Fernseher und Set-Top-Boxen für Fernseher
  • Laptops mit Android Runtime für Chrome

Durch diese Vielfalt kann Ihr Spiel unterschiedliche Bildschirmauflösungen, häufig mit unterschiedlichen Seitenverhältnissen, haben. Beispiele:

  • Ein Smartphone im Querformat mit einem Seitenverhältnis von 19:9 (2280 × 1080)
  • Ein anderes Smartphone im Querformat mit einem Seitenverhältnis von 20:9 (3200 × 1400)
  • Ein 1080p-HD-Fernseher mit einem Seitenverhältnis von 16:9 (1920 × 1080)
  • Tablet mit einem Seitenverhältnis von 4:3 (2048 × 1536)

Diese Unterschiede sollten Sie beim Design Ihres Spiels berücksichtigen, damit die Darstellung unabhängig von Bildschirmauflösung und Seitenverhältnis des Geräts korrekt dargestellt wird.

Projektionsmodi schließen

Ein Defold-Projekt hat eine konfigurierbare Basisauflösung. Diese Auflösung wird in der Datei game.project über die Felder Breite und Höhe in der Kategorie Display festgelegt.

Projektanzeigeeinstellungen aufklappen
Abbildung 1. In den Projekteinstellungen Display

Das Standardverhalten von Defold besteht darin, mit der Basisauflösung zu rendern und das Bild anschließend auf die tatsächliche Auflösung des Zielgeräts zu skalieren. Bei Defold wird dieser Modus als Stretch-Projektion bezeichnet. Bei der gestreckten Projektion wird das ursprüngliche Seitenverhältnis nicht beibehalten. Bei einigen Spielen ist diese Standardeinstellung möglicherweise visuell akzeptabel. Das standardmäßige Defold-Renderingskript enthält zwei zusätzliche Projektionsoptionen, bei denen das Basisseitenverhältnis beibehalten wird: feste Projektion und feste Projektion.

Das folgende Beispiel zeigt ein Beispielprojekt mit einer Basisauflösung von 480 x 272, das im Defold-Editor angezeigt wird.

In diesem Beispiel gilt:

  • Ein „Tilemap“-Objekt wird verwendet, um einen Rahmen um die Ränder der Basisauflösung zu zeichnen.
  • Zwei Sprite-Objekte und ein Textobjekt befinden sich innerhalb der Grenzen der Basisauflösung.
  • Es befinden sich vier Sprite-Objekte, die außerhalb der Grenzen der Basisauflösung positioniert sind: oben, unten, links und rechts.
Beispiel für ein Projektobjektlayout
Abbildung 2. Beispiel für das Layout eines Projektobjekts

Bei Ausführung mit einer Bildschirmauflösung von 960 × 544, genau der doppelten Basisauflösung, wird das Projekt so angezeigt:

Beispielprojekt mit 2-facher Basisauflösung unter Verwendung der Standard-Stretch-Projektion
Abbildung 3. Das Beispielprojekt mit 2-facher Basisauflösung unter Verwendung der standardmäßigen Streckprojektion

Dehnprojektion

Die folgenden Beispiele zeigen die Ergebnisse der Größenanpassung des Fensters mit der standardmäßigen Streckprojektion, wobei das Seitenverhältnis nicht beibehalten wird:

Beispielprojekt mit Stretch-Projektion horizontal zusammengedrückt
Abbildung 4. Das Beispielprojekt wurde bei Verwendung der Stretch-Projektion horizontal zusammengedrückt.
Beispielprojekt, das mit der Stretch-Projektion horizontal gestreckt wurde
Abbildung 5: Das Beispielprojekt wurde bei Verwendung der Stretch-Projektion horizontal gestreckt.

Fixierte Projektion

Im Projektionsmodus mit fester Anpassung wird das Seitenverhältnis der Basisauflösung beibehalten. Da das Seitenverhältnis erhalten bleibt, gibt es einen zusätzlichen Bildschirmbereich, der von der skalierten Basisauflösung nicht abgedeckt wird. Abhängig von der Hauptachse des Seitenverhältnisunterschieds befindet sich dieser zusätzliche Bereich entweder oben und unten oder links und rechts der Basisauflösung. Bei der Projektion mit fester Anpassung wird die Basisauflösung geändert, um diesen Bereich zu berücksichtigen. Durch diese Änderung werden zusätzliche Bereiche der Spielszene außerhalb des Bereichs für die Basisauflösung gerendert. Das resultierende Bild wird dann auf die Bildschirmauflösung skaliert.

Die folgenden Beispiele zeigen ein fest angepasstes Projektions-Rendering für eine Bildschirmauflösung mit einem anderen Seitenverhältnis als der Basisauflösung von 480 × 272:

Beispielprojekt mit einem breiteren Seitenverhältnis und einer Projektion mit fester Anpassung
Abbildung 6. Das Beispielprojekt auf einem Bildschirm mit einem höheren Seitenverhältnis als das Basisseitenverhältnis bei Verwendung einer Projektion mit fester Anpassung
Beispielprojekt mit einem höheren Seitenverhältnis unter Verwendung einer Projektion mit fester Anpassung
Abbildung 7. Das Beispielprojekt auf einem Bildschirm mit einem breiteren Seitenverhältnis als das Basisseitenverhältnis unter Verwendung einer fest angepassten Projektion

Feste Projektion

Der Modus Feste Projektion behält das Seitenverhältnis der Basisauflösung bei und skaliert die Basisauflösung um einen angegebenen Zoomfaktor. Je nach Bildschirmauflösung und Zoomfaktor kann eine Teilmenge oder Obermenge des Basisauflösungsbereichs angezeigt werden.

Die folgenden Beispiele zeigen einen festen Projektionsmodus mit einer Bildschirmauflösung von 644 × 408 und 1-fachem bzw. 2-fachem Zoomfaktor:

Beispielprojekt mit 644 × 408 Pixel, 1-fachem Zoom und fester Projektion
Abbildung 8. Das Beispielprojekt mit einer Displayauflösung von 644 × 408 Pixeln und einer festen Projektion mit einem 1-fachen Zoomfaktor
Beispielprojekt mit 644 × 408 Pixel und 2-fachem Zoom unter Verwendung fester Projektion
Abbildung 9: Das Beispielprojekt mit einer Displayauflösung von 644 × 408 Pixeln und einer festen Projektion mit 2‐fachem Zoomfaktor

Projektionsmodi ändern

Der aktive Projektionsmodus kann zur Laufzeit gewechselt werden, indem die entsprechende Nachricht an den Renderer gesendet wird. Diese Nachrichten werden über das Standard-Nachrichtensystem von Defold gesendet. Alle Meldungen im Projektionsmodus enthalten Parameter, die Z-Werte auf der nahen und entfernten Ebene angeben.

-- Change to stretch projection mode
msg.post("@render:", "use_stretch_projection", { near = -1, far = 1 })

-- Change to fixed fit projection mode
msg.post("@render:", "use_fixed_fit_projection", { near = -1, far = 1 })

-- Change to fixed projection mode
msg.post("@render:", "use_fixed_projection", { near = -1, far = 1, zoom = 2 })

Render-Scripts zum Aufklappen

Das Rendering-Verhalten beim Aufklappen wird durch eine spezielle Skriptdatei gesteuert, die als Renderingscript bezeichnet wird. Wie andere Defold Engine-Skripts ist auch das Renderingskript in der Programmiersprache Lua geschrieben. Bei der Projekterstellung ist ein Standard-Renderingskript enthalten, Sie können es jedoch auch durch ein benutzerdefiniertes Renderingskript ersetzen.

Die Projektionsmodi mit gestreckter Anpassung, fester Anpassung und fester Anpassung sind Merkmale des Standard-Renderingskripts. Wenn einer dieser Modi verwendet wird, generiert das Renderingskript eine orthografische 2D-Projektionsmatrix zur Verwendung beim Rendern von Spielobjekten. Die Konfiguration dieser Matrix unterscheidet sich je nach verwendetem Projektionsmodus.

Sie können ein benutzerdefiniertes Renderingskript verwenden, um die Konfiguration der Projektionsmatrix zu erweitern oder zu ändern. Funktionen, die vom Standardskript nicht unterstützt werden, z. B. Letterboxes oder Pillarboxes für unterschiedliche Seitenverhältnisse, können auch mit benutzerdefinierten Renderingskripts implementiert werden.

Open-Source-Entwickler haben Renderingskripts und Kamerapakete erstellt, die mehr Funktionen als die standardmäßigen Defold-Scripts bieten. Zwei häufig verwendete Pakete sind RenderCam und Defold-Orthographic.

GUI-System zum Aufklappen

Defold enthält ein GUI-System, das auf dem Konzept von GUI-Szenendateien basiert. GUI-Szenendateien enthalten Objekte, die als Knoten bezeichnet werden und einzelne UI-Elemente wie Bilder oder Text definieren.

GUI-Szenendateien können einem Defold-Spielobjekt als Komponente hinzugefügt werden. GUI-Szenen und die zugehörigen Knoten werden separat gerendert und funktionieren etwas anders als normale Spielobjekte. Aufgrund dieser Unterschiede erfordert die Unterstützung mehrerer Bildschirmauflösungen mit GUI-Szenen zusätzliche Überlegungen in Bezug auf GUI-Systemkoordinaten und GUI-Knotenpunkte und -Anker.

GUI-Systemkoordinaten

Normale Defold-Spielobjekte geben ihre Koordinaten im Weltraum an. Ein Kameraobjekt wandelt den Weltraum in einen Bildschirmraum um und zeigt die Spielobjekte an, die sich in der aktuellen virtuellen Ansicht der Kamera befinden. Das GUI-System verwendet eine eigene, separate Kamera. Knoten, die zu einer GUI-Szene gehören, verwenden Bildschirmraumkoordinaten anstelle von Weltraumkoordinaten. Wenn die Bildschirmauflösung von der Projektbasisauflösung abweicht, die für das Layout der GUI-Knoten verwendet wurde, kann dies dazu führen, dass Knoten in Bezug auf die Bildschirmränder oder die Ränder eines übergeordneten Knotens unterschiedliche Ränder haben. Defold bietet mehrere Optionen zum Vornehmen von GUI-Layoutanpassungen, um Unterschiede in der Bildschirmauflösung zu berücksichtigen.

GUI-Knoten-Pivot und -Anker

GUI-Knoten können mit den Eigenschaften X-Anker und Y-Anker an vertikalen und/oder horizontalen Kanten verankert werden.

  • Wenn ein Knoten einen übergeordneten Knoten hat, befindet sich der Anker an den Rändern des übergeordneten Knotens.
  • Wenn ein Knoten keinen übergeordneten Knoten hat, befindet sich der Anker an den Rändern des Bildschirms.

Das folgende Beispiel zeigt eine Beispielszene mit zwei GUI-Knoten, den Controller-Symbolen unten links und oben rechts. Für beide Knoten sind X-Anker und Y-Anker auf None festgelegt:

Beispielszene mit GUI-Elementen
Abbildung 10. Eine Beispielszene mit GUI-Elementen

Wenn die Größe der Anzeige ohne Anker angepasst wird, behalten die Controller-Symbole ihre Position relativ zur Basisauflösung bei:

Die in der Größe angepasste Beispielszene mit GUI-Elementen, deren Anker auf „Keine“ gesetzt sind
Abbildung 11. Die in der Größe angepasste Beispielszene mit GUI-Elementen, deren Anker auf None gesetzt sind.

Wenn der Y-Anker des Knotens links unten auf Bottom und der Y-Anker des Knotens oben rechts auf Top gesetzt ist, werden die GUI-Knoten an den entsprechenden Bildschirmrändern verankert:

Die an die Größe angepasste Beispielszene mit GUI-Elementen, deren Anker an Kanten gesetzt sind.
Abbildung 12. Die in der Größe angepasste Beispielszene mit GUI-Elementen, deren Anker auf Edges gesetzt sind.

Die Eigenschaft Pivot eines GUI-Knotens gibt den Punkt im Rahmen des Knotens an, der der Koordinate Position des Bildschirmbereichs entspricht. Für GUI-Knoten wird standardmäßig die Einstellung Center festgelegt, wobei der Punkt Position in der direkten Mitte des begrenzten Rechtecks liegt. Weitere mögliche Einstellungen für die Pivot-Ansicht sind die vier Himmelsrichtungen und die vier Diagonalen. Die Eigenschaft Pivot kann die Angabe von Randbereichen vereinfachen, wenn sie in Verbindung mit den Eigenschaften X-Anker und Y-Anker verwendet wird.

Im folgenden Beispiel hat der GUI-Knoten des Controller-Symbols unten links für Position den Wert 0,0 und für Pivot den Wert Center festgelegt.

Ein GUI-Knoten, bei dem der Pivot auf „Zentriert“ festgelegt ist
Abbildung 13. Ein GUI-Knoten, bei dem Pivot auf Center festgelegt ist

Das Ändern von Pivot in South West führt zu der folgenden Anpassung:

Ein GUI-Knoten mit der Einstellung „Südwest“ als Drehpunkt
Abbildung 14. Ein GUI-Knoten, bei dem Pivot auf South West festgelegt ist

Anpassungsmodi für GUI-Knoten

Die Größe von GUI-Knoten kann angepasst werden, wenn die Bildschirmauflösung von der Auflösung des Basisprojekts abweicht. Mit der Eigenschaft Adjust Mode wird das Skalierungsverhalten des Knoteninhalts gesteuert. Der Anpassungsmodus hat drei Einstellungen: Fit, Zoom und Stretch.

Fit

Mit der Einstellung Fit wird das Seitenverhältnis des Knoteninhalts beibehalten. Der Inhalt wird so skaliert, dass er entweder der Breite oder Höhe des angepassten Rechtecks des Knotens entspricht. Die gewählte Achse hat den kleineren Unterschied. Dadurch wird sichergestellt, dass der Inhalt in seinem ursprünglichen Seitenverhältnis in das Begrenzungsrechteck passt.

Zoom

Mit der Einstellung Zoom wird auch das Seitenverhältnis des Knoteninhalts beibehalten. Wie bei der Einstellung Fit skaliert Zoom den Inhalt so, dass er entweder der Breite oder Höhe des angepassten Begrenzungsrechtecks des Knotens entspricht. Im Gegensatz zu Fit wird bei Zoom die Achse mit dem größeren Unterschied zur Originalgröße als Übereinstimmungsziel verwendet. Das bedeutet, dass der skalierte Inhalt möglicherweise über das begrenzte Rechteck hinausgeht.

Im Folgenden wird ein Beispiel für zwei GUI-Knoten mit unterschiedlichen Einstellungen für Adjust Mode gezeigt. Das Controller-Symbol links unten hat den Adjust Mode (Modus für Anpassungsmodus) auf Fit, das Controllersymbol rechts oben hat den Adjust Mode (Modus anpassen) auf Zoom.

Zwei GUI-Knoten mit unterschiedlichen Einstellungen für den Anpassungsmodus
Abbildung 15. Zwei GUI-Knoten mit unterschiedlichen Einstellungen für den Adjust Mode

Dehnen

Mit der Einstellung Stretch wird der Knoteninhalt so skaliert, dass er genau mit dem angepassten Begrenzungsrechteck des Knotens übereinstimmt. Das ursprüngliche Seitenverhältnis wird nicht beibehalten.

GUI-Layouts

Defold bietet eine alternative Methode zum Anpassen von GUI-Layouts an verschiedene Bildschirmauflösungen: Layouts. Layouts können einer GUI-Szene hinzugefügt werden, um die Standardeigenschaften von GUI-Knoten zu überschreiben. Ein Layout ist einer bestimmten Bildschirmauflösung zugeordnet. Sind mehrere Layouts verfügbar, wählt Defold das Layout aus, das der tatsächlichen Bildschirmauflösung am ehesten entspricht. Die von einem GUI-Knoten verwendeten Standardressourcen für Position, Größe, Skalierung oder Grafik können alle durch ein Layout überschrieben werden.

Weitere Informationen