Die fortschrittlichsten Spiele, die ich gemacht habe, sind ein 8-Ball-Pool-Spiel mit der Physik-Engine Box2dFlashAS3 und ein Plattformspiel mit Levels.
Als ich Plattformspiele gemacht habe, wollte ich immer wissen, wie man eine Engine herstellt, damit ich sie wiederverwenden kann. Wenn ich Spiele mit Steigungen, Kurven, perfekter Schwerkraft und realer Physik sehe, wünschte ich mir immer, ich könnte die Engine codieren.
Bitte schlagen Sie Techniken und Artikel für die jeweils erforderliche Wissensbasis vor.
architecture
physics
physics-engine
Vishnu
quelle
quelle
Antworten:
Während ich empfehle gegen Ihr eigenes Physik - Engine für etwas anderes als die Erfahrung , es zu tun (nur erkennen , rollen sollten Sie wahrscheinlich werfen es weg , wenn Sie fertig sind - es ist wirklich schwer ist , alle die edgecases und numerische Grenze / Stabilitätsprobleme zu bekommen aussortiert , und Ihre Zeit kann viel besser genutzt werden, wenn Sie einen Beitrag zu einer vorhandenen Engine leisten. Hier einige Ressourcen:
Lektionen in der Billardhalle: Schnelle, genaue Kollisionserkennung zwischen Kreisen oder Kugeln beschreibt die Kollision von Kreisen / Kreisen und Kugeln / Kugeln .
Die N Tutorials eignen sich hervorragend für ein grundlegendes Verständnis der Erkennung und Reaktion auf der Basis des Separating Axis Theorem.
quelle
Erin Catto hält alle Vorträge der GDC über die Implementierung von Box2D online. Box2D hat meiner Erfahrung nach auch einfachen Code zum Lesen.
quelle
So könnten Sie es machen:
Annähernde Bewegung
Jedes physikalische Objekt benötigt diese Vektoren:
So etwas müssen Sie intuitiv in jedem Frame für jedes Physikobjekt tun
a
:Fallstricke : Dies ist als Euler- Integrationsmethode bekannt. Diese Annäherung ist besser für kleine Geschwindigkeiten und Beschleunigungen und mit kleinen Zeitschritten. In einem Spiel ist dies normalerweise der Fall. Wenn sich ein Objekt jedoch sehr schnell auf eine dünne Wand oder direkt auf ein anderes sich bewegendes Objekt zubewegt, wird möglicherweise die Kollision mit diesem Objekt übersprungen, wenn seine Position um einen Betrag erhöht wird, der ausreicht, um es vollständig zu überqueren. Wenn Sie sich schnell bewegende Objekte haben, benötigen Sie möglicherweise die kontinuierliche Kollisionserkennung , um dies zu vermeiden.
Kollision
Kollision kann mit dieser Art von Sequenz angenähert werden:
Dies wird als diskrete Kollisionserkennung bezeichnet, da dies zu diskreten Zeitpunkten geschieht. Jeder Schritt verdient Aufmerksamkeit:
Schritt 1: Kollisionserkennung (Kollidieren die Dinge?)
Für zwei Kreise : Prüfen Sie einfach, ob ihre Zentren mehr als die Summe ihrer Radien voneinander entfernt sind.
Für zwei Rechtecke : Überprüfen Sie, ob die Eckkoordinaten innerhalb des anderen Rechtecks liegen.
Für alles, was komplexere Polygone betrifft, benötigen Sie das Separating-Axis-Theorem , ein Thema für eine andere Frage.
Fallstricke : Es gibt wirklich viele andere Kollisionstypen, die Sie in Betracht ziehen könnten. Einige sind sehr komplex: Konvexe Polygone können sich mehrfach schneiden !
Schritt 2: Kollisionsauflösung (Auseinander schieben.)
Eine einfache Methode zur Lösung einer Kollision ist die Translation durch minimale Penetration unter Verwendung von Werten, die aus der Kollisionserkennung stammen. Dies beinhaltet im Wesentlichen das Auseinanderbewegen der Objekte mit einem möglichst geringen Bewegungsabstand.
Betrachten Sie als Beispiel eine Kreis-Kreis-Kollision, bei der einer der Kreise feststeht. Der minimale Verschiebungsvektor hat die gleiche Richtung wie die Differenz zwischen ihren Mittelpunktvektoren. Ihre Länge ist die Differenz zwischen der Summe ihrer Radien und dem Abstand zwischen den Zentren.
Diese Idee lässt sich leicht auf andere Formen übertragen.
Fallstricke : Wenn beide kollidierenden Objekte beweglich sind, müssen Sie sie möglicherweise um einen Bruchteil der Gesamtentfernung bewegen, um eine glaubwürdige Annäherung an ihre Bewegung zu erhalten. Sie müssen sich offensichtlich in verschiedene Richtungen bewegen.
Schritt 3: Kollisionsphysik (Sonstige Änderungen)
Am offensichtlichsten ist, dass eines oder zwei der Objekte die Richtung ändern, dh den Geschwindigkeitsvektor drehen. Dies ist ziemlich einfach zu implementieren.
Fallstricke : Objekte können elastisch sein , aber nicht . In diesem Fall wird die Gesamtenergie im System reduziert. Unter Umständen müssen Sie ziehen durch den Luftwiderstand. Reibung (insbesondere Haftreibung ) ist bekanntermaßen kompliziert zu implementieren .
Einige Schlussfolgerungen
Die Simulation der Realität ist umso schwieriger, je mehr sie simuliert werden soll. Sie stoßen auf ein Minenfeld von unzähligen Randfällen, unglaublich schwierigen Formeln und ständig wachsenden Stapeln von Forschungsarbeiten.
Wenn Ihre Bedürfnisse einfach sind oder Sie unbedingt lernen möchten, probieren Sie es aus.
Wenn Ihre Anforderungen komplex sind oder Sie Mathematik nicht mögen, lassen Sie sich von einer Physik-Engine die Details beschönigen. Box2D und Bullet sind in Spielen sehr beliebt.
quelle
Ich denke, das könnte nützlich sein: http://gafferongames.com/game-physics/integration-basics/
quelle
Die wahrscheinlich umfangreichste Ressource für Tutorial-Stile:
http://www.wildbunny.co.uk/blog/2011/04/06/physics-engines-for-dummies/
Siehe auch diese Artikel aus demselben Blog:
http: // www.wildbunny.co.uk/blog/2011/04/20/collision-detection-for-dummies/
http://www.wildbunny.co.uk/blog/2011/03/25/speculative-contacts-an- kontinuierlicher-kollisionsmotor-anflug-teil-1 /
quelle
Die beste Quelle für das Erlernen der Spielphysik, auf die ich jemals gestoßen bin, ist Chris Hecker von "Spy Party":
http://chrishecker.com/Rigid_Body_Dynamics
quelle