Creo que he configurado Box2d para tener algún tipo de velocidad máxima para cualquier cuerpo, pero no estoy seguro. Aplico un impulso como (100000000, 100000000)
, y el cuerpo se mueve tan rápido como (100, 100)
- que no es tan rápido en absoluto.Box2d: velocidad lineal máxima posible?
Estoy usando el puerto Box2d XNA C#.
Mi juego es un 2d de arriba hacia abajo.
Aquí hay un código que puede ser relevante:
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);
//...
}
Aquí es un código de ejemplo que se aplica el impulso:
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);
}
Si Constants.PLAYER_IMPULSE_CONSTANT
es en cualquier lugar de 1000f
a 1000000000f
, el jugador puede mover a lo sumo (-120, -120)
a (120, 120)
. Si la constante es menor, como 1f
, el reproductor se moverá más lentamente.
Este código se utiliza para configurar la física para todo en el mundo del juego:
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);
¿Podría ser el amortiguamiento lineal? Lo cambié de 10.0f
a 0
, sin ningún efecto.
ACTUALIZACIÓN: Weirdness con amortiguación lineal: He hecho estas observaciones en el cuerpo que se movía con la aplicar el método de impulso anterior:
Linear Damping Max Speed
0f 120
10f 120
50f 120
55f 90
60f 0
70f 0
100f 0
100000f 0
Por qué hay un rango de sensibilidad de amortiguamiento lineal entre 50f
y 60f
?
El código que aplica el impulso puede ser útil. –
Lo siento. Lo agregué. –
+1 para contrarrestar a quien lo votó. Esta es una pregunta legítima. – avpx