Angenommen, ich versuche, einen Ninja zu erschaffen, der sich an einem Seil herunterlässt oder sich wieder hochzieht, während er möglicherweise von einer Seite zur anderen schwingt oder von Gegenständen getroffen wird. Grundsätzlich wie http://ninja.frozenfractal.com/, aber mit Box2D anstelle von hackigem JavaScript.
Idealerweise möchte ich in Box2D eine Seilverbindung verwenden, mit der ich die Länge nach dem Bau ändern kann. Die Standard-Box2D RopeJoint
bietet diese Funktionalität nicht.
Ich habe überlegt PulleyJoint
, das andere Ende der "Riemenscheibe" mit einem unsichtbaren kinematischen Körper zu verbinden, den ich steuern kann, um die Länge zu ändern, der jedoch PulleyJoint
eher einer Stange als einem Seil ähnelt: Er beschränkt die maximale Länge, im Gegensatz dazu begrenzt RopeJoint
er die minimale auch.
Das Neuerstellen eines RopeJoint
jeden Frames mit einer neuen Länge ist ziemlich ineffizient, und ich bin mir nicht einmal sicher, ob es in der Simulation richtig funktionieren würde.
Ich könnte eine "Kette" von Körpern schaffen, die durch RotationJoint
s verbunden sind, aber das ist auch weniger effizient und weniger robust. Ich wäre auch nicht in der Lage, die Länge willkürlich zu ändern, sondern nur durch Hinzufügen und Entfernen einer ganzen Anzahl von Links, und es ist nicht offensichtlich, wie ich den Rest verbinden würde, ohne vorhandene Verbindungen zu verletzen.
Das klingt nach etwas, das einfach zu tun sein sollte. Übersehe ich etwas?
Update : Es ist mir egal, ob das Seil "verformbar" ist, dh ob es sich tatsächlich wie ein Seil verhält oder ob es mit einer anderen Geometrie kollidiert. Nur ein gerades Seil reicht aus. Ich kann beim Rendern grafische Gimmicks machen. Sie müssen nicht in der Physik-Engine vorhanden sein. Ich möchte nur etwas, RopeJoint
dessen Länge ich nach Belieben ändern kann.