Найти нормальный контакт для датчика в Box2d 2.1a - PullRequest
1 голос
/ 15 марта 2012

Я расширяю b2ContactListener, чтобы узнать нормали моих столкновений. Тем не менее, каждый раз, когда я получаю контакт с датчиком, норма всегда 0,0. Как получить нормальное, если один из тел является сенсором?

override public virtual function BeginContact( contact : b2Contact ) : void
{
    var normal : b2Vec = contact.GetFixtureA.GetBody().GetContactList().contact.GetManifold().m_localPlaneNormal;

    // normal is always 0,0 if it is a sensor.
}

1 Ответ

2 голосов
/ 15 марта 2012

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

Один из способов получения нормального значения без обычного отклика на столкновение состоит в том, чтобы вернуть ваше устройство обратно, чтобы оно не было датчиком, а в обратном вызове PreSolve просто сделайте contact-> SetEnabled (false) для каждого контакта, включающего это устройство.

...