2011-12-08 29 views
2

獲取box2d中碰撞點的最佳方式是什麼?我使用它與cocos2d和Objective C,但我想象其他語言的API是相似的。使用b2ContactListener類將生成b2Contact對象,但我無法在聯繫人位置上找到任何信息。如何獲得box2d中的碰撞位置

+0

看起來像我殺了黨 –

+0

我認爲[演示](http://www.raywenderlich.com/606/how-to-use-box2d-for-just-collision-detection-with- cocos2d-iphone)會爲你工作! – Marine

+0

謝謝,我已經經歷了一段時間。我使用b2Body's,因此檢測碰撞仍然很容易。 –

回答

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

您可以通過這個代碼得到機構持倉.....

即使我在尋找如何讓碰撞點

+0

乾杯 - 雖然自2011年以來我還沒有真正回到這一點 - 但希望對其他人有用。 –

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