Wann sollte ich eine Physik-Engine verwenden? [geschlossen]

12

Seitdem ich Box2D entdeckt habe , verwende ich es für jede spielerische Anwendung, die ich zu schreiben versuche, von sehr kleinen Prototypen oder kleinen Programmen, um etwas zu testen, bis hin zu tatsächlichen Projekten.

Dank dessen ist es so furchtbar einfach, alles von Kollisionen bis hin zur tatsächlichen Physik zu handhaben.

Manchmal habe ich jedoch einige Zweifel: Wenn ich nur mit Kreisen oder AABB umgehen muss und keine fortgeschrittenen Physikwerkzeuge (Gelenke oder ähnliches) benötige, denke ich, dass eine Physik-Engine eine Art nicht benötigter Overhead.

Um meine Frage noch einmal auf den Punkt zu bringen: Würden Sie Box2D (oder andere Physik-Engines) in einem Spiel verwenden, in dem die Physik wirklich einfach ist (wie zum Beispiel Super Mario)? Und wenn nicht, warum?

peoro
quelle
2
Mach was sich richtig anfühlt. Glaubst du, dein Spiel braucht eine Physik-Engine? Glaubst du, Mario würde von Box2D profitieren? Der neueste Mario hat sicherlich ein gutes Gefühl mit guter Physik, aber er fühlt sich nicht so an wie alles, was ich in Box2D gesehen habe.
Jeff
@ Jeff: Das hängt davon ab, ob die Frage "Wann soll ich Box2D verwenden?" oder "Wann sollte ich eine Physik-Engine verwenden?". Der neue Mario enthält sicherlich eine Physik-Engine.
1
@ Joe Wreschnig: Ja, aber gibt es jemals einen Fall, in dem eine Physik-Engine nicht verwendet wird? Das einzige Mal, an das ich denken kann, wäre ein Textabenteuer oder Zeigen und Klicken. Ich denke, es hängt davon ab, wie allgemein Sie Ihre Definition der Physik-Engine machen möchten
Jeff
@ Jeff: Wenige (nicht-physikalische) Puzzlespiele benötigen eines, zB Tetris, Bejeweled. In Actionspielen könnte ich argumentieren, dass die meisten 2D-Shmups nicht von einer Physik-Engine profitieren, da sie im Allgemeinen nur AABB- / Kreisüberlappungsprüfungen, keine Kollisionsreaktion, absolut feste Bewegungspfade und konstante Geschwindigkeit benötigen. Bei Platformern dreht sich alles um Physik.

Antworten:

8

Wenn der für Box2D verwendete Speicher, Speicherplatz, Entwicklungsaufwand oder die Prozessorzeit zu viel für Ihre Zwecke ist, verwenden Sie sie nicht. Andernfalls gibt es keinen Grund, es zu vermeiden, wenn Sie es nützlich finden.

Gregory Avery-Weir
quelle
2
Das ist alles, worauf es wirklich ankommt. Wenn es Ihnen das Leben erleichtert und Sie nicht von den gewünschten Plattformen abhält, ist es ein Gewinn, auch wenn Sie Teile davon nicht nutzen.
1
Oder mit anderen Worten: "Der einzige Grund, das Rad neu zu erfinden, besteht darin, das Rad neu zu erfinden."
Exilyth
4

Etwas so einfaches wie Super Mario, nein, da es nicht wirklich viel Physik hat. (Mario hat keinen Einfluss auf die Physik des anderen Objekts mit seinem Springen)

Wenn Sie Physik im Sinne von mehreren Elementen (mehr als einem) verwenden, die Physik verwenden, um das Ergebnis anderer Objekte zu beeinflussen, würde ich eine Engine verwenden.

Gespenster
quelle
Auf der anderen Seite verfügt Mario über Momentum, Beschleunigung, variable Größe und Richtungskollision, die Sie mit einer Physik-Engine "kostenlos" erhalten, und es handelt sich nicht nur um einfache Überlappungsprüfungen.
Ich stimme zu - ich denke, eine Physik-Engine wird Ihnen die meiste Zeit eine Menge Dinge liefern, die eine Zeitverschwendung wären, wenn Sie sich selbst implementieren würden.
Christopher Horenstein
3
Es stimmt, es ist immer besser, das Rad nicht zu erfinden. Ich finde nur, wenn ich nur ein Rad will, nehme ich keine Blaupause für ein Auto. Darüber hinaus wissen Sie mehr über Ihr Spiel als Ganzes und können die Physik leichter ändern.
Gespenster
1
Das ist eine wirklich schreckliche Analogie. Das ist eher so, als ob Sie ein Rad und Achsen und vielleicht eine Lenksäule und einen Motor wollen, aber vielleicht nicht das Armaturenbrett oder die elektrischen Fensterheber.
3
Wer würde keine elektrischen Fensterheber wollen?
Spooks
2

Meine Antwort lautet: Ja, verwenden Sie für einfache Dinge unbedingt eine Physik-Engine wie Box2D, da Sie keine unnötige Entwicklungszeit damit verbringen sollten, einige der Funktionen zu implementieren, die Sie schnell von einer Physik-Engine erhalten. Definieren Sie beispielsweise einen statischen Körper, und legen Sie einen dynamischen Körper darauf ab. Wenden Sie zur Eingabe der Richtung eine Kraft auf Ihren dynamischen Körper an. In wenigen Minuten haben Sie einen Plattformer. Ich glaube nicht, dass ein Motor so viel Aufwand verursacht, dass sich dies nicht lohnt.

Christopher Horenstein
quelle
3
Man könnte jedoch sagen, dass die Implementierung und Verwendung von Box2D länger dauert als die Erstellung einer einfachen Physik. (obwohl ich vermute, dass dies vom Umfang der Nutzung der Physik abhängt)
Spooks
1
@Spooks: Ich kann mir nichts "Einfacheres" als Box2D vorstellen, das immer noch nützlich ist.
Ich bin hier mit Joe völlig einverstanden. Es gibt keinen einfachen Ersatz für die Nützlichkeit, die mit der Verwendung von Box2D einhergeht. Ich kann mir nicht vorstellen, etwas zu programmieren, das die eigenen Bedürfnisse schneller erfüllt, als zu lernen, wie man Fixtures erstellt und die Schwerkraft mit Box2D definiert.
Christopher Horenstein
1

Wenn die "Physik" in einem Spiel einfach ist, muss keine Physik-Engine importiert werden.

Ich verwende den Begriff Physik locker, da es einen Unterschied zwischen der Modellierungsphysik und der Simulation von Phyiscs gibt. Eine sehr wichtige Sache zu unterscheiden.

Zum Beispiel werden Sie in Mario Bros., wenn Sie rennen und anhalten, etwas rutschen. Überlegen Sie, wie Sie das implementieren könnten.

Sie können es modellieren, indem Sie alle erforderlichen Variablen definieren: z. Masse, Schwerkraft, Reibungskoeffizient, Schub usw. und dann Berechnung Ihrer neuen Geschwindigkeit, Beschleunigung usw.

aber ist es das wert Sie können den gleichen Effekt simulieren, indem Sie die Geschwindigkeit der Spieler verringern, während sie sich nicht bewegen ...

Etwas wie:

if( pressing movement key ) { 
 speed = 5; 
} else { 
 if(speed) speed--; // slide!
} 

Der Unterschied ist, dass eins die Physik ist, das andere nicht. Beide haben Vor- und Nachteile. Aber als allgemeine Regel für einfache Spiele ist es viel einfacher, sie zu fälschen.

Aaronfarr
quelle
1
Diese Art von Physik ist ekelhaft. Wenn Sie es vortäuschen, können Sie es auch schön aussehen lassen. Reibung = 0,9 oder eine Zahl unter 1. GeschwindigkeitX * = Reibung; GeschwindigkeitY * = Reibung;
AttackingHobo
2
Am Ende des Projekts wird es natürlich zu "Wenn (Bewegungstaste drücken und sich nicht bewegen und auf Eis und nicht unter Wasser und Sie haben dieses spezielle Powerup und Sie fahren nicht in einem Boot und ...)".
@ AttackingHobo: In diesem Beitrag geht es nicht darum, einen schönen Gleitalgorithmus zu erstellen. Er soll den Unterschied zwischen einer Simulation und einem Modell veranschaulichen.
Aaronfarr
@Joe: Dies sind nur Änderungen an Ihrer Reibungsvariablen. Vielleicht sollten Sie und @AttackingHobo chatten: P Mit einer Physik-Engine müssen Sie Eigenschaften für jedes Objekt im Spiel definieren. Mein Punkt ist, dass das Anschließen einer Physik-Engine für einfache Spiele nicht automatisch erfolgen sollte. Es ist situativ.
Aaronfarr
1
@aaronfarr: Es gibt keinen Unterschied zwischen einer Simulation und einem Modell. für diese Zwecke sind sie Synonyme. Alles, was Sie gezeigt haben, ist, dass ein isolierter Teil eines Spielzeugmodells / einer Simulation weniger Code ist als die Gesamtheit von Box2D.
0

Sie müssen entsprechend der Situation entscheiden

Profis mit Ihrem benutzerdefinierten Motor

  • Software unter Kontrolle (keine Änderung durch neues Release)
  • Geeignet für Ihr Spiel (nur die Funktionen, die Sie für Ihr Spiel benötigen, so wie Sie sie benötigen)
  • Flexibilität (jede verrückte Dynamik, die Sie wollen, kann codiert werden, jedes zukünftige Feature würde nicht von der Engine abhängen)
  • Lernerfahrung (vielleicht müssen Sie eines Tages eine Engine verbessern und wie man eine baut)
  • Weniger Lernen und Programmieren für einfache Funktionen (manchmal ist es erforderlich, die Struktur einer Engine zu verstehen, um etwas mit ihr zu tun.)
  • Höhere Leistung für einfache Funktionen (für einfache spezifische Funktionen erhalten Sie möglicherweise eine höhere Leistung als mit einer Allzweck-Engine)
  • Weniger Arbeitsspeicher (das Objekt und der Code benötigen möglicherweise viel weniger Platz und Arbeitsspeicher, wenn nur die erforderlichen Funktionen verwendet werden.)

Vorteile der handelsüblichen Physik-Engine:

  • Kann sich ohne großen Aufwand an neue Hardware und neues Betriebssystem anpassen
  • Geringerer Lern- und Programmieraufwand für komplexe Funktionen
  • Höhere Leistung für komplexe Funktionen
Dimitri Ognibene
quelle