Ich mache ein Pool-Spiel wie ein Spiel. Dieses Spiel erfordert korrekte (oder sehr genaue) Reflexionen. Ich habe Box2D und Bullet Physics ausprobiert , aber beide haben dieses Problem.
Befindet sich oben auf diesem Bild eine Wand, wird in einem Poolspiel eine rote Linie im Verlauf eines echten Balls erwartet. Die Motoren zeigen aber oft einen Green-Line-Kurs. Insbesondere,
- Dies geschieht, nachdem eine sich langsam bewegende Kugel die Wand berührt.
- Manchmal wird eine sich schnell bewegende Kugel plötzlich langsamer.
Ich finde eine Physik-Engine, die Pool-Spiele ohne diese Probleme so genau wie möglich simulieren kann. Kann ich ein paar Empfehlungen bekommen? Jetzt grabe ich Newton Game Dynamics , bin mir aber nicht sicher, ob die Engine zeigen wird, was ich will. Ich überlege mir die PhysX- Engine als nächsten Versuch und muss sie selbst erstellen, wenn nichts funktioniert. Aber es ist offensichtlich, dass es sehr lange dauern wird, und ich wünschte, ich würde das nicht tun. Ich werde sehr geschätzt, wenn Sie meine Zeit sparen. Natürlich sind auch Lösungen mit Box2D / Bullet Physics willkommen.
Ich arbeite mit C / C ++ / Objective + C unter iOS.
Ich hänge meine Konfiguration mit Box2D an.
Wände
- statische Kastenform
- lineare / eckige Dämpfung = 0,1
- Rückerstattung = 1,0
- Reibung = 100
- Dichte = 10
- bullet = false
- feste Drehung = falsch
- Trägheitsskala = 1,0
Bälle
- dynamische Kugelform
- lineare / eckige Dämpfung = 0,1
- Rückerstattung = 1,0
- Reibung = 100
- Dichte = 20
- Kugel = wahr
- feste Drehung = falsch
- Trägheitsskala = 1,0
Antworten:
Mehrere Lösungen.
Bei Box2D
b2_velocityThreshold
inb2Settings.h
Datei einstellen . In meinem Fall habe ich es auf gesetzt0.0f
und es hat funktioniert! Masse, Reibung, Dämpfung waren KEIN Problem. Überprüfen Sie diesen Diskussionsthread für weitere Details. http://www.box2d.org/forum/viewtopic.php?f=3&t=6906&p=30782#p30782Verwendung einer anderen Physik-Engine. Newton Game Dynamics hat dies standardmäßig korrekt konfiguriert. Die Verwendung von Newton-Dynamik in iOS ist zwar möglich, jedoch etwas schwieriger als bei anderen. Ich habe mehrere Tage gebraucht, um es für iOS zu konfigurieren.
Ich frage auch in BulletPhysics-Foren. Ich werde dies aktualisieren, wenn ich eine Lösung habe.
- (bearbeiten) -
Es gibt einige Schwellenattribute in Bullet, mit denen ich jedoch nicht genau dasselbe finden konnte
b2_velocityThreshold
.Das sieht ähnlich aus, hat aber nicht gut funktioniert.
quelle
Box2D wird tun, was Sie wollen, aber Sie müssen die Restitutionskonstanten (Bounce-Konstanten) für die Wand- und Ballbefestigungen einstellen. Für ein Poolspiel möchten Sie wahrscheinlich mit perfekter Rückstellung und hoher Reibung, aber linearer und eckiger Dämpfung beginnen und von dort aus optimieren.
quelle
Physik-Engines haben eine Sprungschwelle. Ich weiß nicht, wie ich es in diesen beiden Motoren machen soll, aber wenn der Schwellenwert zu hoch eingestellt ist, werden Stöße unter einer bestimmten Geschwindigkeit ignoriert. Senken Sie die Sprungschwelle und es wird mit niedrigeren Geschwindigkeiten springen.
Ich weiß, dass Sie nach einer anderen Physik-Engine gefragt haben, aber alle mir bekannten Physik-Engines verwenden Sprungschwellen, um zu verhindern, dass Objekte zittern, wenn sie aufeinander sitzen. Es ist also kontraproduktiv, eine gute Physik-Engine vorzuschlagen, da jede gute Physik-Engine diesen Effekt hat.
quelle
Ich hatte dieses Problem und für mich war die Lösung die perfekte Rückerstattung.
Für mich ist das also eine Größe von 0,5 für alle Objekte. Weil sqrt (r1 * r1 + r2 * r2) == 1 in perfekter Situation ist.
quelle