2

在box2d中获得碰撞点的最佳方法是什么?我将它与 cocos2d 和 Objective C 一起使用,但我想 API 在其他语言中是相似的。使用 b2ContactListener 类将生成 b2Contact 对象,但我找不到任何有关联系人位置的信息。

4

2 回答 2

0

您可以使用以下代码来获取碰撞点

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)) 

您可以通过此代码获取身体位置.....

即使我正在寻找如何获得碰撞点

于 2013-12-23T09:33:38.463 回答
0
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);
    } 
}
于 2013-12-27T20:23:02.490 回答