Подтвердить что ты не робот

Box2D крышка скорости тела?

У меня есть тело, которое имеет массу 10, и каждый цикл программы я применяю к ней силу 100, используя простой подход;

Vector2 force = new Vector2(0, 1) * 100;
bod.ApplyForce(force, bod.GetWorldCenter());

Он отлично работает, ускоряется и все это, но как только он добирается до скорости 10 (100/10, я полагаю), это не будет идти быстрее. Я никоим образом не физик, но помню, что тело должно постоянно ускоряться, как будто оно находится под действием силы тяжести. Является ли эта скорость ограничением в результате того, как Box2D что-то делает, или я чем-то рискованно прикручиваю? Кроме того, что мне делать, чтобы исправить это.

ПРИМЕЧАНИЕ. Я получаю ту же ограниченную скорость, если я использую ApplyLinearImpulse вместо ApplyForce

Обновление: Мне хорошо известно максимальное ограничение максимальной скорости, наложенное Box2D (в b2Settings.h). В моем примере рассматриваемый предмет движется значительно ниже этого предела, изменяя приложенную силу: 1000 или 10000 всегда будут приближаться к максимальной скорости (сила/масса).

4b9b3361

Ответ 1

Вы достигаете максимально допустимой скорости объекта. Есть два способа исправить это:

  • Отрегулируйте максимально допустимую скорость в настройках Box2D; Откройте "Настройки" и измените значение MaxTranslation float/const на более высокое значение, я предполагаю его по умолчанию 2.0.

  • Уменьшите размер объекта, выполните необходимые вычисления, масштабируйте свои объекты. Это технически правильный способ сделать это, так как комментарии Box2D для MaxTranslation Примечание:

Максимальная линейная скорость тела. Этот предел очень велик и используется для предотвращения численных проблем. Вам не нужно настраивать это.

Итак, попробуйте # 1, и если это сработает, значит, вы, вероятно, нуждаетесь в масштабировании. Надеюсь, что это поможет.