2012-03-15 2 views
1

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

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. 
} 

ответ

2

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

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