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
Der Aufbau von Defold beruht auf einigen Konzepten, die du gut verstehen solltest. Dieses Handbuch erklärt, woraus die Bausteine von Defold bestehen. Lies anschließend das Handbuch zur Adressierung und das Handbuch zur Nachrichtenübermittlung. Außerdem stehen dir direkt im Editor eine Reihe von Tutorials zur Verfügung, die dir einen schnellen Einstieg ermöglichen.

Es gibt drei grundlegende Arten von Bausteinen, mit denen du ein Defold-Spiel aufbaust:
Sammlungen sind Baumstrukturen, die Spielobjekte und weitere Sammlungen enthalten. Eine Sammlung wird immer in einer Datei gespeichert.
Beim Start lädt die Defold-Engine eine einzelne Startsammlung (bootstrap collection), die in der Einstellungsdatei game.project festgelegt ist. Die Startsammlung heißt häufig “main.collection”, du kannst aber jeden beliebigen Namen verwenden.
Eine Sammlung kann Spielobjekte und weitere Sammlungen enthalten, die als Referenz auf die Datei der jeweiligen Untersammlung eingebunden sind. Du kannst sie beliebig tief verschachteln. Hier siehst du eine Beispieldatei namens “main.collection”. Sie enthält ein Spielobjekt (mit der ID “can”) und eine Untersammlung (mit der ID “bean”). Die Untersammlung enthält wiederum zwei Spielobjekte: “bean” und “shield”.

Beachte, dass die Untersammlung mit der ID “bean” in einer eigenen Datei namens “/main/bean.collection” gespeichert ist und in “main.collection” lediglich referenziert wird:

Du kannst Sammlungen selbst nicht adressieren, da es zur Laufzeit keine Objekte gibt, die den Sammlungen “main” und “bean” entsprechen. Manchmal musst du jedoch den Bezeichner einer Sammlung als Teil des Pfads zu einem Spielobjekt verwenden (Einzelheiten findest du im Handbuch zur Adressierung):
-- file: can.script
-- get position of the "bean" game object in the "bean" collection
local pos = go.get_position("bean/bean")
Eine Sammlung wird einer anderen Sammlung immer als Referenz auf eine Sammlungsdatei hinzugefügt:
Führe einen Rechtsklick auf die Sammlung in der Ansicht Outline aus und wähle Add Collection File.
Spielobjekte sind einfache Objekte, die während der Ausführung deines Spiels jeweils eine eigene Lebensdauer haben. Spielobjekte besitzen eine Position, eine Drehung und eine Skalierung, die du jeweils zur Laufzeit verändern und animieren kannst.
-- animate X position of "can" game object
go.animate("can", "position.x", go.PLAYBACK_LOOP_PINGPONG, 100, go.EASING_LINEAR, 1.0)
Du kannst Spielobjekte leer verwenden, etwa als Positionsmarkierungen. Üblicherweise sind sie jedoch mit verschiedenen Komponenten wie Sprites, Audiokomponenten, Skripten, Modellen, Fabriken (factory) und weiteren ausgestattet. Spielobjekte werden entweder im Editor erstellt und in Sammlungsdateien platziert oder zur Laufzeit dynamisch durch Fabrikkomponenten erzeugt.
Spielobjekte werden entweder direkt in eine Sammlung eingefügt (in-place) oder einer Sammlung als Referenz auf eine Spielobjektdatei hinzugefügt:
Führe einen Rechtsklick auf die Sammlung in der Ansicht Outline aus und wähle Add Game Object (direkt einfügen) oder Add Game Object File (als Dateireferenz einfügen).
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:

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:
Eine Liste aller verfügbaren Komponententypen findest du in der Komponentenübersicht.
Wenn du eine Datei für eine Sammlung, ein Spielobjekt oder eine Komponente erstellst, legst du damit einen sogenannten Prototyp an (in anderen Engines auch als „Prefabs“ oder „Blueprints“ bekannt). Dadurch wird lediglich eine Datei zur Dateistruktur des Projekts hinzugefügt. Deinem laufenden Spiel wird nichts hinzugefügt. Um eine Instanz einer Sammlung, eines Spielobjekts oder einer Komponente auf Grundlage einer Prototypdatei hinzuzufügen, fügst du eine Instanz davon in eine deiner Sammlungsdateien ein.
In der Ansicht Outline kannst du sehen, auf welcher Datei eine Objektinstanz beruht. Die Datei “main.collection” enthält drei Instanzen, die auf Dateien beruhen:

Der Vorteil von Prototypdateien wird deutlich, wenn du mehrere Instanzen eines Spielobjekts oder einer Sammlung hast und alle ändern möchtest:

Wenn du die Prototypdatei änderst, wird jede Instanz, die diese Datei verwendet, sofort aktualisiert.

Hier wird das Sprite-Bild der Prototypdatei geändert, und sofort werden alle Instanzen aktualisiert, die diese Datei verwenden:

In einer Sammlungsdatei kannst du Hierarchien von Spielobjekten aufbauen, sodass ein oder mehrere Spielobjekte einem einzelnen übergeordneten Spielobjekt untergeordnet sind. Wenn du ein Spielobjekt auf ein anderes ziehst und dort ablegst, wird das gezogene Spielobjekt dem Zielobjekt untergeordnet:

Eltern-Kind-Hierarchien von Objekten sind dynamische Beziehungen, die beeinflussen, wie Objekte auf Transformationen reagieren. Jede Transformation (Bewegung, Drehung oder Skalierung), die auf ein Objekt angewendet wird, wird wiederum auch auf dessen untergeordnete Objekte angewendet, sowohl im Editor als auch zur Laufzeit:

Umgekehrt erfolgen Verschiebungen eines untergeordneten Objekts im lokalen Koordinatensystem des übergeordneten Objekts. Im Editor kannst du wählen, ob du ein untergeordnetes Spielobjekt im lokalen Koordinatensystem oder im Weltkoordinatensystem bearbeitest. Wähle dazu Edit ▸ World Space (die Standardeinstellung) oder Edit ▸ Local Space.
Du kannst das übergeordnete Objekt auch zur Laufzeit ändern, indem du eine set_parent-Nachricht an das Objekt sendest.
local parent = go.get_id("bean")
msg.post("child_bean", "set_parent", { parent_id = parent })
Ein häufiges Missverständnis ist, dass sich die Position eines Spielobjekts in der Sammlungshierarchie ändert, wenn es Teil einer Eltern-Kind-Hierarchie wird. Dabei handelt es sich jedoch um zwei sehr unterschiedliche Dinge. Eltern-Kind-Hierarchien verändern den Szenengraphen dynamisch, sodass Objekte visuell miteinander verbunden werden können. Die Adresse eines Spielobjekts wird ausschließlich durch seine Position in der Sammlungshierarchie bestimmt. Sie bleibt während der gesamten Lebensdauer des Objekts unverändert.