Penso di aver configurato Box2d per avere una sorta di velocità massima per qualsiasi corpo, ma non ne sono sicuro. Applico un impulso come (100000000, 100000000)
e il corpo si muove con la stessa rapidità di (100, 100)
- che non è affatto così veloce.Box2d: massima velocità lineare possibile?
Sto usando la porta di Box2d XNA C#.
Il mio gioco è un 2d top-down.
Ecco alcuni codice che potrebbe essere rilevante:
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);
//...
}
Ecco alcuni esempi di codice che si applica l'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);
}
Se Constants.PLAYER_IMPULSE_CONSTANT
è ovunque da 1000f
al 1000000000f
, il giocatore può muovere al massimo (-120, -120)
a (120, 120)
. Se la costante è inferiore, come 1f
, il giocatore si muoverà più lentamente.
Questo codice viene utilizzato per impostare la fisica per tutto nel mondo di gioco:
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);
Potrebbe forse essere lineare smorzamento? L'ho modificato da 10.0f
a 0
, senza alcun effetto.
UPDATE: Stranezze con smorzamento lineare: Feci queste osservazioni sul corpo che si muove con il metodo dell'impulso applicare sopra:
Linear Damping Max Speed
0f 120
10f 120
50f 120
55f 90
60f 0
70f 0
100f 0
100000f 0
Perché c'è un intervallo di sensibilità lineare smorzamento tra 50f
e 60f
?
Il codice che applica l'impulso potrebbe essere utile. –
Siamo spiacenti. Aggiunto. –
+1 per neutralizzare chi ha votato questo in basso. Questa è una domanda legittima. – avpx