Как получить позицию столкновения в box2d - PullRequest
2 голосов
/ 08 декабря 2011

Какой лучший способ получить точку столкновения в box2d.Я использую его с cocos2d и Objective C, но я думаю, что API похож на других языках.Использование класса b2ContactListener приведет к созданию объектов b2Contact, но я не могу найти никакой информации о положении контакта.

Ответы [ 2 ]

0 голосов
/ 28 декабря 2013
try this method

OBJECT1_CATEGORY_BITS = 0x00000001;
OBJECT2_CATEGORY_BITS = 0x00000002;

void MyContactListener::PreSolve(b2Contact *contact, const b2Manifold
*oldManifold) 
{
    b2Fixture *fixtureA = contact->GetFixtureA();
    b2Fixture *fixtureB = contact->GetFixtureB();

    b2Filter filterA = fixtureA->GetFilterData();
    b2Filter filterB = fixtureB->GetFilterData();

    if ((filterB.categoryBits == OBJECT1_CATEGORY_BITS) && (filterA.categoryBits == OBJECT2_CATEGORY_BITS))
    {
        b2Vec2 normal = contact->GetManifold()->localNormal;

        NSLog(@"pointX : %f",normal.x);
        NSLog(@"pointY : %f",normal.y);
    } 
}
0 голосов
/ 23 декабря 2013

Вы можете использовать следующий код, чтобы получить точку столкновения

b2Body *bodyA = contact->GetFixtureA()->GetBody();
b2Body *bodyB = contact->GetFixtureB()->GetBody();

if ((bodyA->GetFixtureList()->GetFilterData().categoryBits == Categorybits1 || bodyA->GetFixtureList()->GetFilterData().categoryBits == categoryBits2) && (bodyB->GetFixtureList()->GetFilterData().categoryBits == categoryBits2 || bodyB->GetFixtureList()->GetFilterData().categoryBits == Categorybits1)) 

Вы можете получить положения тела с помощью этого кода .....

даже я ищу, как получить точку столкновения

...