Я думаю, что настроил Box2d, чтобы иметь своего рода максимальную скорость для любого тела, но я не уверен. Я применяю импульс как (100000000, 100000000)
, и тело перемещается настолько же быстро как (100, 100)
- который не является этим быстро вообще.
Я использую порт Box2d XNA C#.
Моя игра является нисходящим 2-м.
Вот некоторые нормы, которые могут быть соответствующими:
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);
//...
}
Вот некоторый пример кода, который применяет импульс:
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);
}
Если Constants.PLAYER_IMPULSE_CONSTANT
где угодно от 1000f
кому: 1000000000f
, плеер может переместиться самое большее (-120, -120)
кому: (120, 120)
. Если константа меньше, как 1f
, плеер будет перемещаться более медленно.
Этот код используется для установки физики для всего в игровом мире:
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);
Это могло возможно быть линейное затухание? Я изменил его от 10.0f
кому: 0
, без эффекта.
ОБНОВЛЕНИЕ: Странность с линейным затуханием: Я сделал эти наблюдения относительно тела, которым двигают с применять импульсным методом выше:
Linear Damping Max Speed
0f 120
10f 120
50f 120
55f 90
60f 0
70f 0
100f 0
100000f 0
Почему там диапазон чувствительности в линейном затухании между 50f
и 60f
?
У меня такая же проблема с версией 2.1a Я обнаружил, что может помочь изменение строки 128 в b2Settings.as. Измените static public const b2_maxTranslation: Number = 2.0 на большее число. уверен, что это неправильный путь, но прямо сейчас не знаю, как это сделать правильно.