Up to date

This page is up to date for Godot 4.2. If you still find outdated information, please open an issue.

2D-Koordinatensysteme und 2D-Transformationen

Einführung

Dies ist ein detaillierter Überblick über die verfügbaren Built-in-2D-Koordinatensysteme und -2D-Transformationen. Die grundlegenden Konzepte werden in Viewport- und Canvas-Transformationen behandelt.

Transform2D sind Matrizen, die Koordinaten von einem Koordinatensystem in ein anderes umwandeln. Um sie verwenden zu können, ist es von Vorteil, zu wissen, welche Koordinatensysteme in Godot verfügbar sind. Für ein tieferes Verständnis bietet das Matrizen und Transformationen-Tutorial Einblicke in die zugrunde liegende Funktionalität.

Godot 2D-Koordinatensysteme

Die folgende Grafik gibt einen Überblick über die Godot-2D-Koordinatensysteme und die verfügbaren Node-Transformationen, Transformations-Funktionen und koordinatensystembezogenen Funktionen. Links ist der Bildschirm des OS Window Managers zu sehen, rechts sind die CanvasItems. Der Einfachheit halber enthält diese Grafik keine SubViewport, SubViewportContainer, ParallaxLayer und ParallaxBackground, die alle auch Transformationen beeinflussen.

Die Grafik basiert auf einem Node-Baum der folgenden Form: Root-Fenster (Fenster einbetten)Fenster (keine Fenster einbetten)CanvasLayerCanvasItemCanvasItemCanvasItem. Es sind noch komplexere Kombinationen möglich, wie z.B. tief verschachtelte Fenster und SubViewports, dieses Beispiel soll jedoch einen Überblick über die Methodik im Allgemeinen geben.

../../../_images/transforms_overview.webp

Zum Vergrößern auf die Grafik klicken.

  • Element-Koordinaten

    Dies ist das lokale Koordinatensystem eines CanvasItem.

  • Koordinaten des übergeordneten Elements

    Dies ist das lokale Koordinatensystem des übergeordneten CanvasItems. Wenn CanvasItems im Canvas positioniert werden, erben sie normalerweise die Transformationen ihrer übergeordneten CanvasItems. Eine Ausnahme ist CanvasItems.top_level.

  • Canvas-Koordinaten

    Wie im vorangegangenen Tutorial Canvas-Ebenen erwähnt, gibt es zwei Arten von Canvases (Viewport-Canvas und CanvasLayer-Canvas) und beide haben ein Canvas-Koordinatensystem. Diese werden auch Weltkoordinaten genannt. Ein Viewport kann mehrere Canvases mit unterschiedlichen Koordinatensystemen enthalten.

  • Viewport-Koordinaten

    Dies ist das Koordinatensystem des Viewport.

  • Kamerakoordinaten

    Dies wird nur intern für Funktionen wie 3D-Kamerastrahlenprojektionen verwendet.

  • Embedder-Koordinaten / Bildschirmkoordinaten

    Jeder Viewport (Fenster oder SubViewport) im Szenenbaum ist entweder in einem anderen Node oder im OS Window Manager eingebettet. Der Ursprung dieses Koordinatensystems ist identisch mit der linken oberen Ecke des Fensters oder SubViewports und sein Maßstab ist der des Embedders oder des OS Window Managers.

    Wenn der Embedder der OS Window Manager ist, werden sie auch Bildschirmkoordinaten genannt.

  • Absolute Embedder-Koordinaten / Absolute Bildschirmkoordinaten

    Der Ursprung dieses Koordinatensystems ist die linke obere Ecke des einbettenden Nodes oder des OS Window Manager-Bildschirms. Sein Maßstab ist der des Embedders oder des OS Window Managers.

    Wenn der Embedder der OS Window Manager ist, werden sie auch als absolute Bildschirmkoordinaten bezeichnet.

Node-Transformationen

Jedem der genannten Nodes sind eine oder mehrere Transformationen zugeordnet, und aus der Kombination dieser Nodes lassen sich die Transformationen zwischen den verschiedenen Koordinatensystemen ableiten. Bis auf wenige Ausnahmen handelt es sich bei den Transformationen um Transform2D, und die folgende Liste enthält Einzelheiten und Auswirkungen der einzelnen Transformationen.

  • CanvasItem-Transformation

    CanvasItems sind entweder Control-Nodes oder Node2D-Nodes.

    Für Control-Nodes besteht diese Transformation aus einer Position relativ zum Ursprung des Parent-Nodes und einer Skalierung und Rotation um einen Pivotpunkt.

    Für Node2D-Nodes besteht transform aus Position, Rotation, Skalierung und Skew.

    Die Transformation wirkt sich auf das Element selbst und in der Regel auch auf untergeordnete CanvasItems und im Falle eines SubViewportContainers auf den enthaltenen SubViewport aus.

  • CanvasLayer-Transformation

    Die Transformation des CanvasLayers betrifft alle CanvasItems innerhalb der CanvasLayer. Sie wirkt sich nicht auf andere CanvasLayer oder Fenster in ihrem Viewport aus.

  • CanvasLayer folgt der Viewport-Transformation

    Die Viewport-Transformation folgen-Property ist eine automatisch berechnete Transformation, die auf der Canvas-Transformation-Property des Viewports und der Viewport-Skalerung folgen-Property des CanvasLayers basieret und kann, wenn sie aktiviert ist, verwendet werden, um einen Pseudo-3D-Effekt zu erzielen. Sie wirkt auf die gleichen Child-Nodes wie die CanvasLayer-Transformation.

  • Viewport-Canvas-Transformation

    Die Canvas-Transformation wirkt sich auf alle CanvasItems im Standard-Canvas des Viewports aus. Sie wirkt sich auch auf CanvasLayers aus, die ihre Viewport-Transformation aktiviert haben. Die aktive Camera2D des Viewports funktioniert, indem sie diese Transformation ändert. Sie wirkt sich nicht auf die eingebetteten Fenster dieses Viewports aus.

  • Viewport-globale Canvas-Transformation

    Viewports haben auch eine globale Canvas-Transformation. Dies ist die Master-Transformation und beeinflusst alle individuellen Canvas-Ebenen und eingebetteten Fenster-Transformationen. Sie wird hauptsächlich im CanvasItem-Editor von Godot verwendet.

  • Viewport-Stretch-Transformation

    Schließlich haben Viewports eine Stretch-Transformation, die bei der Größenänderung oder beim Stretching des Viewports verwendet wird. Diese Transformation wird für Fenster verwendet, wie in Mehrere Auflösungen beschrieben; kann aber auch manuell auf SubViewports mittels size und size_2d_override gesetzt werden. translation, rotation und skew sind die Default-Werte und sie kann nur scale als Nicht-Default-Wert haben.

  • Fenstertransformation

    Um den Inhalt des Fensters wie in Mehrere Auflösungen beschrieben zu skalieren und zu positionieren, enthält jedes Fenster eine Fenstertransformation. Sie ist z.B. für die schwarzen Balken an den Seiten des Fensters verantwortlich, damit der Viewport mit einem festen Seitenverhältnis dargestellt wird.

  • Fensterposition

    Jedes Fenster hat auch eine position-Property, um seine Position innerhalb seines Embedders zu beschreiben. Die Einbettungsstelle kann ein anderer Viewport oder der OS Window Manager sein.

  • SubViewportContainer Shrink-Transformation

    Die stretch-Property zusammen mit der stretch_shrink-Property deklarieren für einen SubViewportContaner, ob und um welchen Integer-Faktor das enthaltene SubViewport im Vergleich zur Containergröße skaliert werden soll.