Проблема с контактом BOX2D (isTouching)

Вот моя проблема Изображение

альтернативный текст

Я хочу проверить, соприкасаются ли шары, что работает идеально. Однако иногда этот мяч со стрелкой не поднимается, что, конечно, имеет смысл, поскольку он ничего не касается. Тем не менее, я хочу дать небольшую свободу действий, чтобы мяч, скажем, на расстоянии 4 пикселя/0,001 м, считался касающимся. Итак, какая идея / как я могу ее реализовать. Я посмотрел на код isTouching и вот что я могу придумать.

     var b1 = body1;
var b2 = body2;

 Transform xf;
 Transform xf2;

  b1.GetTransform(out xf);
b2.GetTransform(out xf2);


var touching = AABB.TestOverlap(b1.GetFixtureList().GetShape(), b2.GetFixtureList().GetShape(), ref xf, ref xf2);

 if (!touching)
 continue;

Мне все еще нужно проверить, есть ли мяч далеко, и я понятия не имею, что я могу сделать.


person Mike Diaz    schedule 30.06.2010    source источник


Ответы (1)


Не зная, какие у вас классы, сложно дать точный ответ. Но общий принцип заключается в том, чтобы увеличить границы, которые вы проверяете. Например, если ваши фигуры представляют собой круги радиуса n, при проверке столкновений вы можете использовать радиус n + 2. Обратите внимание, что вы по-прежнему рисуете круг, используя радиус n. Вы просто используете увеличенный радиус для обнаружения столкновений.

Точно так же с AABB вам нужно будет увеличить границы на пару пикселей. Как вы это сделаете, будет зависеть от того, как работают ваши классы.

person Dave Carlile    schedule 03.07.2010
comment
Если вы увеличите радиус круглых фигур, их AABB также должны быть обновлены. Нет необходимости увеличивать их размер вручную. - person Staffan E; 04.07.2010