Box2d: Maximal mögliche Lineargeschwindigkeit?
Ich denke, ich habe Box2d so konfiguriert, dass es für jeden Körper eine Art Maximalgeschwindigkeit gibt, aber ich bin mir nicht sicher. Ich wende einen Impuls wie(100000000, 100000000)
, und der Körper bewegt sich genauso schnell wie(100, 100)
- was gar nicht so schnell ist.
Ich verwende den Box2d XNA C # -Port.
Mein Spiel ist ein Top-Down-2D.
Hier ist ein Code, der relevant sein kann:
private readonly Vector2 GRAVITY = new Vector2(0, 0);
public void initializePhysics(ContactReporter contactReporter)
{
world = new World(GRAVITY, true);
IContactListener contactListener = contactReporter;
world.ContactListener = contactListener;
}
public void Update(GameTime gameTime)
{
// ...
worldState.PhysicsWorld.Step((float)gameTime.ElapsedGameTime.TotalSeconds, 10, 10);
//...
}
Hier ist ein Beispielcode, der den Impuls anwendet:
private void ApplyImpulseFromInput()
{
Vector2 movementImpulse = new Vector2();
if (inputReader.ControlActivation(ActionInputType.MOVE_LEFT) == 1f)
{
movementImpulse.X = -Constants.PLAYER_IMPULSE_CONSTANT;
} else if (inputReader.ControlActivation(ActionInputType.MOVE_RIGHT) == 1f)
{
movementImpulse.X = Constants.PLAYER_IMPULSE_CONSTANT; ;
}
if (inputReader.ControlActivation(ActionInputType.MOVE_UP) == 1f)
{
movementImpulse.Y = -Constants.PLAYER_IMPULSE_CONSTANT; ;
} else if (inputReader.ControlActivation(ActionInputType.MOVE_DOWN) == 1f)
{
movementImpulse.Y = Constants.PLAYER_IMPULSE_CONSTANT; ;
}
model.Body.ApplyImpulse(movementImpulse, model.Position);
}
ObConstants.PLAYER_IMPULSE_CONSTANT
ist irgendwo von1000f
zu1000000000f
, der Spieler kann sich höchstens bewegen(-120, -120)
zu(120, 120)
. Wenn die Konstante kleiner ist, wie1f
, der Spieler bewegt sich langsamer.
Dieser Code wird verwendet, um die Physik für alles in der Spielwelt einzurichten:
controller.Model.BodyDef = new BodyDef();
controller.Model.BodyDef.type = controller.Model.Mobile ? BodyType.Dynamic : BodyType.Static;
controller.Model.Body = worldState.PhysicsWorld.CreateBody(controller.Model.BodyDef);
controller.Model.Body.SetLinearDamping(10.0f);
Kann es evtl. an der linearen Dämpfung liegen? Ich habe es geändert von10.0f
zu0
, ohne Wirkung.
AKTUALISIEREN Seltsamkeit mit linearer Dämpfung: Ich habe diese Beobachtungen an dem Körper gemacht, der mit der oben beschriebenen Impulsmethode bewegt wird:
Linear Damping Max Speed
0f 120
10f 120
50f 120
55f 90
60f 0
70f 0
100f 0
100000f 0
Warum gibt es einen Empfindlichkeitsbereich bei der linearen Dämpfung zwischen50f
und60f
?