Существует ситуация: объект «A» падает на статический объект «B», но когда «A» приземляется на «B», между «A» и «B» имеется интервал. Как решить проблемы?Промежуток между объектами
ответ
Box2d использует итеративный решатель, а качество моделирования зависит от численных значений, которые вы используете в симуляции. В руководстве box2d рекомендуется сохранять динамические размеры тела в диапазоне [0,1, 10], например. Точность 0.002 (из вашего комментария) очень хорошая.
Итак, есть два способа решить вашу проблему. Измените используемую измерительную систему или увеличьте итерации положения и/или скорости. Первый способ намного лучше, потому что он не увеличит время вычисления.
Я нашел решение для сжатия объекта физики из его презентации, например, у меня есть текстурированный блок 60x60 px, поэтому я создаю физический прямоугольник 58x58, и это помогает. –
Box2D имеет b2_linearSlop
параметр (AKA «Skin» в PhysX)
Это немного дополнение к размеру геометрии для улучшения стабильности физического моделирования. Возможно, это вызывает описанные вами артефакты.
Попробуйте искать следующие строки в исходном коде Box2D (я взял его из флэш-порт оригинальной Box2D, тем не менее, он должен быть одинаковым для других платформ):
/**
* A small length used as a collision and constraint tolerance. Usually it is
* chosen to be numerically significant, but visually insignificant.
*/
static public const b2_linearSlop:Number = 0.005; // 0.5 cm
ты что то, что вы видите на экране, и что делает физический движок, одинаковы? Box2D имеет функцию отладки, чтобы помочь с этим. – iforce2d
Я отлаживаю и вижу, что значения неверны, например, y coord - «3.598», но должно быть 3.6! –