Nach vielen Versuchen ging ich mit box2d.
Es gibt im Allgemeinen zwei Ansätze für diese Simulation oder zumindest habe ich 2 gefunden:
- Eine besteht darin, einige Kreisformen zu verwenden und sie mit entfernten Verbindungen zu verbinden.
- und das andere ist, Rechtecke für die Kette selbst zu machen und sie dann mit Drehgelenken zu befestigen
In jedem Szenario muss man einen Ancher haben (was in meinem Fall eine statische Box war). Es ist besser, wenn Sie das Gewicht der Seilteile verringern (entweder verwenden Sie Kreisformen oder Rechteckformen). Um beispielsweise eine realistischere Physik zu erzielen, habe ich deren Dichte auf 0,1 eingestellt und für die am Ende des Seils angeschlossene Box die Dichte 10 verwendet.
Eine andere Sache, die Sie sich Sorgen machen müssen, wie Ihr Seilsegment aufeinander reagiert. Ich wollte nur, dass sich mein Seil in der Szene frei bewegt, also markierte ich alle Seilbefestigungen als Sensoren. Möglicherweise benötigen Sie einen anderen Ansatz.
Das nächste, worüber Sie sich Sorgen machen müssen, ist die Anzahl der Iterationen, die Sie für das Welt-Update durchführen: Für ein niedriges Seilsegment (möglicherweise höchstens 8) ist es nicht erforderlich, einen hohen Iterationswert zu verwenden, möglicherweise 10/10, den box2d selbst vorgeschlagen hat ist genug, aber wenn Sie die Anzahl der Segmente erhöhen, habe ich zum Beispiel 30 Segmente ausprobiert. Bei einer geringen Anzahl von Iterationen scheint Ihr Seil die Länge mehr zu erhöhen, als es sollte. Sie benötigen also möglicherweise 40/40 Iterationen, um diese Situationen zu lösen.
Nach einigen Tests scheint Box 2d für Szenen mit Objektgrößen von 0,1 m bis 10 m ausgelegt zu sein, und die für große Szenen empfohlene maximale Größe liegt bei etwa 50 x 50 m. Grundsätzlich müssen Sie Ihr Objekt verkleinern, um diesen Parametern zu entsprechen. In meinem Fall habe ich zuerst versucht, Pixelpositionen direkt an box2d zu übergeben, aber es schien, als gäbe es einige Geschwindigkeitsbegrenzungen, die verhindern, dass sich die Welt so schnell bewegt, wie es sein sollte. Deshalb musste ich meine Szene ungefähr 64 Mal skalieren, um die besten Ergebnisse zu erzielen. Obwohl ich mich nicht selbst getestet habe, gibt es in Box2d einige Einschränkungen, die Sie daran hindern, größere Szenen zu verwenden. Zum Beispiel gibt es einen definierten Wert in der b2Setting.h
Datei, mit dem #define b2_maxTranslation 2.0f
Sie die Einstellungen für box2d ändern können, der jedoch nicht empfohlen wird.