2011-07-09 5 views
0

Существует ситуация: объект «A» падает на статический объект «B», но когда «A» приземляется на «B», между «A» и «B» имеется интервал. Как решить проблемы?Промежуток между объектами

+0

ты что то, что вы видите на экране, и что делает физический движок, одинаковы? Box2D имеет функцию отладки, чтобы помочь с этим. – iforce2d

+0

Я отлаживаю и вижу, что значения неверны, например, y coord - «3.598», но должно быть 3.6! –

ответ

1

Box2d использует итеративный решатель, а качество моделирования зависит от численных значений, которые вы используете в симуляции. В руководстве box2d рекомендуется сохранять динамические размеры тела в диапазоне [0,1, 10], например. Точность 0.002 (из вашего комментария) очень хорошая.

Итак, есть два способа решить вашу проблему. Измените используемую измерительную систему или увеличьте итерации положения и/или скорости. Первый способ намного лучше, потому что он не увеличит время вычисления.

+0

Я нашел решение для сжатия объекта физики из его презентации, например, у меня есть текстурированный блок 60x60 px, поэтому я создаю физический прямоугольник 58x58, и это помогает. –

0

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