Myślę, że skonfigurowałem Box2d, aby uzyskać jakąś maksymalną prędkość dla dowolnego ciała, ale nie jestem pewien. Używam impulsu, takiego jak (100000000, 100000000)
, a ciało porusza się tak szybko, jak (100, 100)
- co wcale nie jest takie szybkie.Box2d: Maksymalna możliwa prędkość liniowa?
Używam portu Box2d XNA C#.
Moja gra jest odgórnym 2d.
Oto niektóre kodu, które mogą być istotne:
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);
//...
}
Oto przykład kodu, który stosuje impuls:
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);
}
Jeśli Constants.PLAYER_IMPULSE_CONSTANT
jest wszędzie od 1000f
do 1000000000f
, gracz może poruszać najwyżej od (-120, -120)
do (120, 120)
. Jeśli stała jest mniejsza, np. 1f
, gracz będzie poruszał się wolniej.
Kod ten jest używany do ustawiania fizyki na wszystko w świecie gry:
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);
Czyżby tłumienie liniowe? Zmieniłem go z 10.0f
na 0
, bez efektu.
UPDATE: Weirdness z tłumieniem liniowej: Zrobiłem te obserwacje na organizm, który poruszał się z zastosowania metody impulsowej powyżej:
Linear Damping Max Speed
0f 120
10f 120
50f 120
55f 90
60f 0
70f 0
100f 0
100000f 0
Dlaczego istnieje zakres czułości w liniowego tłumienia między 50f
i 60f
?
Kod, który stosuje ten impuls, może być przydatny. –
Przepraszamy. Dodano. –
+1, aby przeciwdziałać temu, kto to głosował. To jest uzasadnione pytanie. – avpx