Je pense que j'ai configuré Box2d pour avoir une sorte de vitesse maximale pour n'importe quel corps, mais je ne suis pas sûr. J'applique une impulsion comme (100000000, 100000000)
, et le corps se déplace aussi vite que (100, 100)
- ce qui n'est pas si rapide du tout. J'utilise le port CX2 XNA C#.Box2d: Vitesse linéaire maximale possible?
Mon jeu est un 2d top-down.
Voici un code qui peut être pertinent:
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);
//...
}
Voici quelques exemples de code qui applique l'impulsion:
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
est partout de 1000f
à 1000000000f
, le joueur peut se déplacer au plus (-120, -120)
à (120, 120)
. Si la constante est inférieure, comme 1f
, le joueur se déplace plus lentement.
Ce code est utilisé pour mettre en place la physique pour tout dans le monde du jeu:
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);
Serait-il possible l'amortissement linéaire? Je l'ai changé de 10.0f
à 0
, sans effet.
MISE À JOUR: Weirdness avec un amortissement linéaire: Je l'ai fait ces observations sur le corps qui se déplace avec l'appliquer la méthode d'impulsion ci-dessus:
Linear Damping Max Speed
0f 120
10f 120
50f 120
55f 90
60f 0
70f 0
100f 0
100000f 0
Pourquoi une plage de sensibilité linéaire d'amortissement entre 50f
et 60f
?
Le code qui applique l'impulsion peut être utile. –
Désolé. Ajouté –
+1 pour neutraliser celui qui a voté. C'est une question légitime. – avpx