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
Defold enthält Box2D für 2D-Physiksimulationen und Bullet für 3D-Physik. Über die Einstellung Physics 2D im App Manifest wählst du Box2D Version 3, Box2D (Legacy Defold version) oder None aus. Die bisherige Implementierung ist der Standard; Box2D 3 musst du ausdrücklich auswählen. Ein Wechsel der Implementierung kann die Simulationsergebnisse verändern und erfordern, dass du die versionsspezifischen Box2D-Projekteinstellungen neu abstimmst.
Der komponentenorientierte Arbeitsablauf mit Kollisionsobjekten (collision objects) und das Modul physics, die in diesen Handbüchern beschrieben werden, funktionieren mit beiden Box2D-Implementierungen; die Auswahl von None entfernt die 2D-Physik. Defold stellt außerdem die APIs b2d, b2d.body, b2d.fixture, b2d.shape, b2d.joint, b2d.chain und b2d.world auf niedrigerer Ebene für den direkten Zugriff auf 2D-Körper, Formen, Gelenke, Ketten und Welten bereit. Nicht jede Funktion auf niedrigerer Ebene ist in beiden Box2D-Implementierungen verfügbar; prüfe in der generierten API-Dokumentation jeder Funktion, ob sie von der im App Manifest ausgewählten Implementierung unterstützt wird.
Die wichtigsten Konzepte der in Defold verwendeten Physik-Engines sind:
Zusätzlich zu den Kollisionsobjekten selbst kannst du auch Zwangsbedingungen für Kollisionsobjekte definieren, die meist als Gelenke bezeichnet werden. Damit verbindest du zwei Kollisionsobjekte und beschränkst ihre Bewegung oder übst auf andere Weise Kräfte aus, um ihr Verhalten in der Physiksimulation zu beeinflussen. Erfahre mehr über Gelenke.
Du kannst die Physikwelt außerdem entlang eines geraden Strahls untersuchen und auslesen. Das wird als Strahlabfrage (raycast) bezeichnet. Erfahre mehr über Strahlabfragen.
Die Physik-Engine simuliert Newtonsche Physik und ist darauf ausgelegt, mit den Einheiten Meter, Kilogramm und Sekunde (MKS) gut zu funktionieren. Außerdem ist die Physik-Engine auf bewegliche Objekte mit einer Größe im Bereich von 0,1 bis 10 Metern abgestimmt (statische Objekte können größer sein), und standardmäßig behandelt die Engine 1 Einheit (Pixel) als 1 Meter. Diese Umrechnung zwischen Pixeln und Metern ist auf Simulationsebene praktisch, aus Sicht der Spieleentwicklung aber nicht sehr nützlich. Mit den Standardeinstellungen würde eine Kollisionsform mit einer Größe von 200 Pixeln als 200 Meter groß behandelt. Das liegt weit außerhalb des empfohlenen Bereichs, zumindest für ein bewegliches Objekt.
Im Allgemeinen muss die Physiksimulation skaliert werden, damit sie mit der typischen Größe der Objekte in einem Spiel gut funktioniert. Der Skalierungsfaktor der Physiksimulation lässt sich in game.project über die Einstellung für die Physikskalierung ändern. Wenn du diesen Wert beispielsweise auf 0.02 setzt, werden 200 Pixel als 4 Meter behandelt. Beachte, dass die Schwerkraft (die ebenfalls in game.project geändert wird) erhöht werden muss, um die veränderte Skalierung auszugleichen.
Es wird empfohlen, die Physik-Engine in regelmäßigen Abständen zu aktualisieren, um eine stabile Simulation sicherzustellen (im Gegensatz zu Aktualisierungen in möglicherweise unregelmäßigen, von der Bildrate abhängigen Abständen). Du kannst die Physik mit einem festen Zeitschritt aktualisieren, indem du die Einstellung Use Fixed Timestep im Abschnitt Physics der Datei game.project aktivierst. Die Aktualisierungsfrequenz wird durch die Einstellung Fixed Update Frequency im Abschnitt Engine der Datei game.project gesteuert. Wenn du für die Physik einen festen Zeitschritt verwendest, wird außerdem empfohlen, über die Lebenszyklusfunktion fixed_update(self, dt) mit den Kollisionsobjekten deines Spiels zu interagieren, beispielsweise wenn du Kräfte auf sie ausübst.