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.
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.
Bei Ausführung mit einer Bildschirmauflösung von 960 × 544, genau der doppelten Basisauflösung, wird das Projekt so angezeigt:
Dehnprojektion
Die folgenden Beispiele zeigen die Ergebnisse der Größenanpassung des Fensters mit der standardmäßigen Streckprojektion, wobei das Seitenverhältnis nicht beibehalten wird:
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:
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:
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:
Wenn die Größe der Anzeige ohne Anker angepasst wird, behalten die Controller-Symbole ihre Position relativ zur Basisauflösung bei:
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 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.
Das Ändern von Pivot in South West
führt zu der folgenden Anpassung:
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
.
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.