Wie simuliere ich einen Federfall in box2d?

10

Ich arbeite mit AndEngine mit Box2d-Erweiterung, aber auch allgemeine Antworten oder eine Konzeptidee werden geschätzt.

Ich habe federähnliche Objekte in einer 2D-Seitenansicht, die ich Teil der Physiksimulation sein möchte. Ich benutze lineare Dämpfung, um die "Feder" langsam fallen zu lassen. Dies ist möglicherweise keine gute Idee, vielleicht sollte ich bei jedem Update lieber Kraft anwenden, aber dies funktioniert trotzdem und lässt das Objekt "leicht" aussehen und es fühlt sich an, als gäbe es Luft mit Widerstand.

Wie kann ich nun die Objekte tatsächlich wie Federn aussehen lassen, die durch die Luft fallen?

Insbesondere suche ich nach zwei Arten von Objekten: Lang mit geringer Dichte, die sich in einer langsam schwingenden Bewegung nach unten bewegen sollten, und quadratischen Objekten, die nur zufällig die Flugbahn ändern würden. Es wäre großartig, wenn dies eine Simulation sein könnte und die Länge ein Parameter wäre - je länger das Objekt ist, desto mehr würde es schwingen. Im Moment möchte ich Federn, Blätter und Schneeflocken in einer Cartoon-Welt simulieren.

Wege fallender Gegenstände

MartinTeeVarga
quelle
2
Wie wäre es mit einem Screenshot oder einer Konzeptskizze oder so etwas? Schließlich gibt es Unmengen verschiedener Dinge, die Sie als Feder betrachten könnten, und ich würde sagen, die meisten werden sich je nach Ihrer Situation unterschiedlich verhalten.
Mario
Weitere Informationen und ein Bild hinzugefügt.
MartinTeeVarga

Antworten:

6

Ähnlich wie bei der Mondlandung sollten Sie sie vortäuschen . Die Physik der durch Flattern, Tumble und Wirbel induzierten Autorotation ist komplex. Es gibt Artikel zur Simulation dieses Effekts , und sie produzieren einige schöne Java-Animationen .

Aber ich würde noch weiter in Ihre Fälschung gehen und so etwas wie eine wachsende Sinuswelle implementieren , um die Bewegung zu animieren.

Geben Sie hier die Bildbeschreibung ein

Natürlich sollten Sie die Startwerte, die Rate der unabhängigen Erhöhung von Amplitude und Frequenz anpassen, bis Sie etwas erhalten, das näher an Ihren Wünschen liegt. Sie möchten etwas Zufälligkeit, um es interessant zu machen. Wie Ihr Beispiel zeigt, können außerdem sehr leichte Objekte mit großer Oberfläche tatsächlich in der Nähe der Wellenränder aufsteigen. Wellen über einer bestimmten Amplitude sollten also beginnen, einen Wobbelwert mit einem kleinen begrenzten Maximalwert zu berücksichtigen.

Je weniger Masse und Oberfläche ein Objekt hat, desto mehr erhöhen Sie die Amplitude und Frequenz der Sinuswelle. Die größere Masse und die geringere Oberfläche sollten zu einer Verringerung von Amplitude und Frequenz führen.

MichaelHouse
quelle
3
** Verschwörer **
Mikolaj Marcisz
Ok, ich kann also zwei Funktionen haben: eine wachsende Sinuswelle, die die horizontale Bewegung steuert, dann eine Funktion, die die vertikale Bewegung steuert und wahrscheinlich davon abhängt, wie weit das Objekt vom Zentrum entfernt ist, und eine Kappe hat, die die Bewegung unterbricht und Senden Sie es zurück ... Wenn ich eine solche kombinierte Funktion herausfinde, die mir eine Kraft verleiht, wie wende ich die Kraft an? In jedem Tick des Motors ein wenig basierend auf der verstrichenen Zeit? Ich habe vorher nicht wirklich mit box2d gearbeitet.
MartinTeeVarga
Klingt so, als würde das gut funktionieren und die Schwerkraft den Rest erledigen lassen. Es gibt verschiedene Möglichkeiten, mit der Kraft umzugehen. Wahrscheinlich ist es in jedem Tick des Motors, basierend auf der verstrichenen Zeit, wie Sie sagen. Sie wären Impulskräfte, was für diesen Rahmen einen Moment bedeutet. Weitere Informationen finden Sie in dieser Frage (dies gilt auch dann, wenn Sie Cocos2D nicht wie in der Frage verwenden).
MichaelHouse