Есть ли верхний предел скорости при использовании box2d?

Я использую box2d для моделирования физики. Я перемещаю круг с помощью клавиш со стрелками, прикладывая импульс к телу при каждом нажатии клавиши. К сожалению, круг движется мучительно медленно и, кажется, не ускоряется, как должно быть у настоящего физического тела. Размеры моего мира 400x800 пикселей. Радиус тела круга равен 20f.

Согласно this, проблема может быть решена путем уменьшения радиуса круга при его создании. и масштабирование после получения положения тела во время рисования. Кажется, это вообще не имеет никакого значения. Есть ли какой-то шаг или настройка, которые мне здесь не хватает?

Код на pastebin


person ivymike    schedule 08.02.2013    source источник
comment
Не могли бы вы поделиться соответствующим кодом? Например. конструкция кузова и т.   -  person Tom    schedule 08.02.2013
comment
@Tom Добавлена ​​ссылка на код в pastebin. Я использую box2d с игровым движком libgdx, поэтому код на Java.   -  person ivymike    schedule 08.02.2013
comment
Вы на самом деле применяете импульс к кругу где-то? ApplyLinearImpulse   -  person Tom    schedule 08.02.2013
comment
@ Том Да. Я делаю это сразу после определения импульса (обновил код, чтобы отразить это): приспособление.getBody().applyLinearImpulse(импульс, приспособление.getBody ().   -  person ivymike    schedule 08.02.2013
comment
Помимо довольно высокой плотности, я не вижу ничего необычного в том, что вы наклеили. Какую отладку вы делали? Вы пробовали жестко кодировать импульс для применения, а не полагаться на нажатие клавиши и т. Д.?   -  person Tom    schedule 08.02.2013
comment
@ Том Ага. Жестко закодированный импульс, просто чтобы посмотреть, работает ли он. Не имело никакого значения. Также пытался установить линейную скорость напрямую, применить силу и т. д. Я знаю, что эти вызовы имеют некоторый эффект, потому что они перемещают тело до тех пор, пока оно не достигнет некоторой скорости. Но после этого скорость вообще не увеличивается.   -  person ivymike    schedule 08.02.2013


Ответы (2)


Мне потребовалось довольно много времени, чтобы понять это сейчас, но на самом деле ЕСТЬ жесткое ограничение скорости в Box2D. См. здесь:

Существует максимальный предел перемещения в 2,0 единицы за временной шаг, указанный в файле b2Settings.h в исходном коде.

Если у вас есть один шаг на кадр при 60 кадрах в секунду, то ваши тела могут двигаться с максимальной скоростью 120 м/с. Возможно, однажды это сэкономит кому-то немного времени.

person noone    schedule 08.10.2013

Да, есть разница между тем, какой размер вы используете. Box2d работает с числами с плавающей запятой, поэтому его точность ограничена, а качество моделирования отличается. Box2d лучше всего работает с динамическими телами размера 0.1 to 10.

Поэтому, как правило, вы должны предпочесть использовать одни единицы измерения для физики, а другие для графики.

Теперь к вашему вопросу. На скорость тела влияют столкновения, трение (если одно тело скользит по другому) и linear damping. Поэтому проверьте, какое значение для linear damping вы используете (насколько я помню, по умолчанию оно не равно нулю). Насколько мне известно, ограничений по скорости нет, но более высокая скорость обеспечит менее качественные коллизии при использовании того же временного шага.

person Andrew    schedule 08.02.2013
comment
К сожалению, установка линейного демпфирования на ноль тоже не помогла :( - person ivymike; 08.02.2013