2013-02-08 15 views
8

Ich benutze box2d für Physik-Simulation. Ich bewege einen Kreis mit den Pfeiltasten, indem ich einen Impuls auf den Körper drücke, wenn eine Taste gedrückt wird. Leider bewegt sich der Kreis unerträglich langsam und scheint nicht so zu beschleunigen, wie es ein echter physischer Körper tun sollte. Meine Welt Abmessungen sind 400x800 Pixel. Der Radius des Kreiskörpers ist 20f.Gibt es bei Verwendung von box2d eine obere Grenze für die Geschwindigkeit?

Gemäß this kann das Problem gelöst werden, indem der Kreisradius beim Erstellen verkleinert und nach dem Erhalt der Körperposition während des Malens vergrößert wird. Es scheint überhaupt keinen Unterschied zu machen. Gibt es einen Schritt oder eine Einstellung, die ich hier vermisse?

Code on pastebin

+0

Können Sie den relevanten Code teilen? Z.B. Aufbau des Körpers etc. – Tom

+0

@Tom Link für Code auf Pastebin hinzugefügt. Ich benutze box2d mit libgdx game engine - also ist der Code in Java. – ivymike

+1

Wirfst du den Impuls irgendwo auf den Kreis? 'ApplyLinearImpulse' – Tom

Antwort

3

Ja, es gibt einen Unterschied zwischen denen Größe Sie verwenden. Box2d arbeitet über Gleitkommazahlen und somit ist die Genauigkeit begrenzt und die Simulationsqualität ist unterschiedlich. Box2d ist abgestimmt, um am besten mit dynamischen Körpern der Größe 0.1 to 10 zu arbeiten.

So im Allgemeinen sollten Sie lieber für Grafiken

Nun zu Ihrer Frage eine Einheit für Physik und andere verwenden. Die Körpergeschwindigkeit wird durch Kollisionen, Reibung (wenn ein Körper über die andere rutscht) und durch linear damping beeinflusst. Überprüfen Sie also, welchen Wert für linear damping Sie verwenden (es ist standardmäßig nicht Null, wie ich mich erinnere). Soweit ich weiß, gibt es keine Geschwindigkeitsbegrenzungen, aber eine höhere Geschwindigkeit führt zu Kollisionen mit geringerer Qualität, wenn der gleiche Zeitschritt verwendet wird.

+1

Das Einstellen der linearen Dämpfung auf Null hat leider auch nicht geholfen :( – ivymike

19

Es hat ziemlich lange gedauert, um das jetzt zu verstehen, aber es tatsächlich tatsächlich IS eine harte Grenze für die Geschwindigkeit in Box2D. Siehe :

Es gibt eine maximale Bewegungsgrenze von 2,0 Einheiten pro Zeitschritt, angegeben in der Datei b2Settings.h im Quellcode.

Wenn Sie einen Schritt pro Frame bei 60 FPS haben, können sich Ihre Körper mit einer maximalen Geschwindigkeit von 120 m/s bewegen. Vielleicht wird das jemandem irgendwann ein bisschen Zeit sparen.

Verwandte Themen