Manuals
Manuals




This translation is community contributed and may not be up to date. We only maintain the English version of the documentation. Read this manual in English

Komponenten

Komponenten (components) verleihen Spielobjekten (game objects) eine bestimmte Darstellung und/oder Funktionalität. Komponenten müssen in Spielobjekten enthalten sein und werden durch die Position, Drehung und Skalierung des Spielobjekts beeinflusst, das sie enthält:

Komponenten

Viele Komponenten haben typspezifische Eigenschaften, die du ändern kannst. Außerdem gibt es typspezifische Funktionen für die Interaktion mit ihnen zur Laufzeit:

-- disable the can "body" sprite
msg.post("can#body", "disable")

-- play "hoohoo" sound on "bean" in 1 second
sound.play("bean#hoohoo", { delay = 1, gain = 0.5 } )

Komponenten werden entweder direkt in ein Spielobjekt eingefügt (in-place) oder einem Spielobjekt als Referenz auf eine Komponentendatei hinzugefügt:

Klicke mit der rechten Maustaste auf das Spielobjekt in der Ansicht Outline und wähle Add Component (direkt einfügen) oder Add Component File (als Dateireferenz einfügen).

In den meisten Fällen ist es am sinnvollsten, Komponenten direkt im Spielobjekt zu erstellen. Die folgenden Komponententypen müssen jedoch in separaten Ressourcendateien erstellt werden, bevor du sie einem Spielobjekt als Referenz hinzufügst:

  • Script
  • GUI
  • Particle FX
  • Tile Map

Komponententypen

Defold unterstützt die folgenden Komponententypen:

Weitere Komponenten können durch Erweiterungen hinzugefügt werden:

Komponenten aktivieren und deaktivieren

Die Komponenten eines Spielobjekts werden bei dessen Erstellung aktiviert. Wenn du eine Komponente deaktivieren möchtest, sende eine disable-Nachricht an die Komponente:

-- disable the component with id 'weapon' on the same game object as this script
msg.post("#weapon", "disable")

-- disable the component with id 'shield' on the 'enemy' game object
msg.post("enemy#shield", "disable")

-- disable all components on the current game object
msg.post(".", "disable")

-- disable all components on the 'enemy' game object
msg.post("enemy", "disable")

Um eine Komponente wieder zu aktivieren, kannst du eine enable-Nachricht an die Komponente senden:

-- enable the component with id 'weapon'
msg.post("#weapon", "enable")

Komponenteneigenschaften

Die Komponententypen von Defold haben jeweils unterschiedliche Eigenschaften. Der Bereich Properties im Editor zeigt die Eigenschaften der Komponente an, die gerade im Bereich Outline ausgewählt ist. In den Handbüchern zu den einzelnen Komponententypen erfährst du mehr über die verfügbaren Komponenteneigenschaften.

Position, Drehung und Skalierung von Komponenten

Visuelle Komponenten haben normalerweise Eigenschaften für Position und Drehung und meist auch eine Eigenschaft für die Skalierung. Du kannst diese Eigenschaften im Editor ändern. In fast allen Fällen lassen sie sich jedoch nicht zur Laufzeit ändern (die einzige Ausnahme ist die Skalierung von Sprite- und Beschriftungskomponenten, die zur Laufzeit geändert werden kann).

Wenn du die Position, Drehung oder Skalierung einer Komponente zur Laufzeit ändern musst, änderst du stattdessen die Position, Drehung oder Skalierung des Spielobjekts, zu dem die Komponente gehört. Das wirkt sich auch auf alle anderen Komponenten dieses Spielobjekts aus. Wenn du nur eine einzelne von mehreren Komponenten eines Spielobjekts verändern möchtest, wird empfohlen, diese Komponente in ein separates Spielobjekt zu verschieben. Füge dieses dann als untergeordnetes Spielobjekt dem Spielobjekt hinzu, zu dem die Komponente ursprünglich gehörte.

Zeichenreihenfolge von Komponenten

Die Zeichenreihenfolge visueller Komponenten hängt von zwei Dingen ab:

Prädikate im Render-Skript

Jeder Komponente ist ein Material zugewiesen, und jedes Material hat ein oder mehrere Tags. Das Render-Skript definiert wiederum eine Reihe von Prädikaten, die jeweils einem oder mehreren Material-Tags entsprechen. Die Prädikate werden nacheinander in der Funktion update() des Render-Skripts gezeichnet. Dabei werden jeweils die Komponenten gezeichnet, die den im Prädikat definierten Tags entsprechen. Das standardmäßige Render-Skript zeichnet zuerst Sprites und Kachelkarten in einem Durchlauf, dann Partikeleffekte in einem weiteren Durchlauf, jeweils im Weltkoordinatensystem. Anschließend zeichnet das Render-Skript GUI-Komponenten in einem separaten Durchlauf im Bildschirmkoordinatensystem.

Z-Wert von Komponenten

Alle Spielobjekte und Komponenten sind im 3D-Raum positioniert, wobei ihre Positionen als vector3-Objekte angegeben werden. Wenn du den grafischen Inhalt deines Spiels in 2D betrachtest, bestimmen der X- und der Y-Wert die Position eines Objekts entlang der Achsen für „Breite“ und „Höhe“. Die Z-Position bestimmt die Position entlang der „Tiefenachse“. Mit der Z-Position kannst du die Sichtbarkeit überlappender Objekte steuern: Ein Sprite mit einem Z-Wert von 1 erscheint vor einem Sprite an der Z-Position 0. Standardmäßig verwendet Defold ein Koordinatensystem, das Z-Werte zwischen -1 und 1 zulässt:

Modell

Die Komponenten, die einem Render-Prädikat entsprechen, werden gemeinsam gezeichnet. Ihre Zeichenreihenfolge hängt vom endgültigen Z-Wert der jeweiligen Komponente ab. Der endgültige Z-Wert einer Komponente ist die Summe der Z-Werte der Komponente selbst, des Spielobjekts, zu dem sie gehört, und aller übergeordneten Spielobjekte.

Die Reihenfolge, in der mehrere GUI-Komponenten gezeichnet werden, wird nicht durch den Z-Wert der GUI-Komponenten bestimmt. Die Zeichenreihenfolge der GUI-Komponenten wird durch die Funktion gui.set_render_order() gesteuert.

Beispiel: Zwei Spielobjekte A und B. B ist A untergeordnet. B hat eine Sprite-Komponente.

Objekt Z-Wert
A 2
B 1
B#sprite 0.5

Bei der obigen Hierarchie beträgt der endgültige Z-Wert der Sprite-Komponente von B: 2 + 1 + 0.5 = 3.5.

Wenn zwei Komponenten genau denselben Z-Wert haben, ist ihre Reihenfolge nicht definiert. Dadurch können die Komponenten abwechselnd voreinander erscheinen und flackern oder auf verschiedenen Plattformen in unterschiedlicher Reihenfolge gerendert werden.

Das Render-Skript definiert eine nahe und eine ferne Begrenzungsebene für Z-Werte. Komponenten mit einem Z-Wert außerhalb dieses Bereichs werden nicht gerendert. Der Standardbereich reicht von -1 bis 1, kann aber leicht geändert werden. Die numerische Genauigkeit der Z-Werte ist bei einer nahen und fernen Grenze von -1 und 1 sehr hoch. Wenn du mit 3D-Assets arbeitest, musst du möglicherweise die nahe und ferne Grenze der Standardprojektion in einem eigenen Render-Skript ändern. Weitere Informationen findest du im Rendering-Handbuch.

Optimierungen der maximalen Komponentenanzahl

Die Einstellungsdatei game.project enthält viele Werte, die angeben, wie viele Ressourcen eines bestimmten Typs höchstens gleichzeitig existieren können. Häufig wird diese Anzahl pro geladener Sammlung (collection), auch als Welt bezeichnet, gezählt. Die Defold-Engine verwendet diese Höchstwerte, um Speicher für die jeweilige Anzahl im Voraus zu reservieren und so dynamische Speicherzuweisungen und Speicherfragmentierung während der Ausführung des Spiels zu vermeiden.

Die Datenstrukturen, die Defold zur Darstellung von Komponenten (components) und anderen Ressourcen verwendet, sind auf einen möglichst geringen Speicherverbrauch optimiert. Dennoch solltest du die Werte sorgfältig festlegen, um nicht mehr Speicher als tatsächlich nötig zu reservieren.

Um den Speicherverbrauch weiter zu optimieren, analysiert der Build-Vorgang von Defold die Inhalte des Spiels und überschreibt die Höchstwerte, wenn sich die genaue Anzahl mit Sicherheit bestimmen lässt:

  • Wenn eine Sammlung keine Fabrikkomponenten (factory components) enthält, wird Speicher für die genaue Anzahl jeder Komponente und der Spielobjekte (game objects) reserviert. Die festgelegten Höchstwerte werden dabei ignoriert.
  • Wenn eine Sammlung eine Fabrikkomponente enthält, werden die dynamisch erzeugten Objekte analysiert. Für Komponenten, die durch die Fabriken dynamisch erzeugt werden können, und für Spielobjekte wird der Höchstwert verwendet.
  • Wenn eine Sammlung eine Fabrik oder eine Sammlungsfabrik (collection factory) mit aktivierter Option “Dynamic Prototype” enthält, verwendet diese Sammlung die Höchstwerte.