2012-03-01 19 views
3

BeginContact、EndContact、PreSolve、PostSolveの4つのメソッドを実装して自分のコンタクトリスナーを作成しました。Box2dで衝突点を取得する方法は?

これらの方法のどのパラメータから現在の接点が得られますか?

私はこのような何かを試してみましたが、何もBOX2Dバージョン2.3.2では

void CListener::PreSolve(b2Contact* contact, const b2Manifold* oldManifold) { 
    for(int i = 0 ; i < oldManifold->pointCount; ++i) { 
     b2ManifoldPoint p = oldManifold->points[i]; 
    } 
} 
+3

これは役に立ちます:http://www.iforce2d.net/b2dtut/collision-anatomy – iforce2d

+0

@ iforce2d:偉大なチュートリアル! – Andrew

答えて

0

を助けていない、「接触」ポイントはb2ContactListener方法のcontactパラメータ(最初のパラメータ)から得ています。私は括弧の中に連絡先を入れました。これは、重なり合った状況で得られた点も含みます(形が接触していないところに移動したところ)。

基本接点情報は、b2Contact::GetManifold()メソッドから返された連絡先のb2Manifold構造体から取得されます。しかし、これらは、そのマニホールドに関連付けられている2つの図形のローカル座標です。

世界座標で接触点を望むなら(私はあなたが望むだろうと思う)、連絡先のb2Contact::GetWorldManifoldメソッドを代わりに呼び出してb2WorldManifoldインスタンスを埋め込むことができます。この方法は、本質的にはb2Manifoldを含む連絡先から必要な情報を収集し、ポイントをワールド座標に変換する便利な方法です。

世界座標の接点のうち実際に有効なもの(0,1,2など)の数や、連絡先を表す多様な種類を知るには、b2Manifold情報 - 具体的にはpointCountおよびtypeフィールド。

最後に、@ iforce2dがあなたのためにリンクしているウェブページですが、私はまだ役立つと感じており、ここで述べたよりも口頭で、視覚的に包括的です。

関連する問題