2011-12-08 24 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を使用しているので、衝突を検出することはまだ簡単です。 –

答えて

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); 
    } 
} 
関連する問題