2011-06-30 3 views
0

cpSpaceShapeQuery関数はどのように機能しますか?私はそれについての文書を見つけることができません。うん...私はそれを文書に周りにやったことがなかったChipmunk Physics:cpSpaceShapeQuery

答えて

1

アンドレア...申し訳ありません。基本的には、ボディとシェイプを作成し(スペースに追加する必要はありません)、それを使用して他のクエリ関数とよく似たクエリを実行します。

このコードスニペットは、ボディとシェイプのコピーをスタック上に作成し、そのパスを最初に予測した衝突ポイントにシミュレートします。

cpBody body = *(originalBody); 
cpPolyShape shape = *((cpPolyShape *)originalShape); 
shape.shape.body = &body; 

cpFloat dt = 1.0f/60.0f; 
cpVect gravity = space->gravity; 

int count = 0; 
for(int i=0; i<300; i++){ 
    cpBodyUpdatePosition(&body, dt); 
    cpBodyUpdateVelocity(&body, gravity, 1.0f, dt); 

    if(cpSpaceShapeQuery(space, (cpShape *)&shape, NULL, NULL)){ 
     quads[count%maxQuads] = quad(body.p, body.rot, CGRectMake(0, 2*32, 64, 64), tsize); 
     count++; 

     break; 
    } 

    if(i%10==0){ 
     quads[count%maxQuads] = quad(body.p, body.rot, rect, tsize); 
     count++; 
    } 
} 
+0

本当にありがとうございました。私は実際にはクエリを使用していません:)ポイントは、特定の種類のシェイプがテスト中のmuシェイプと衝突するときにのみ、シェイプをフィルタリングする必要があります。さらにShapeQuery関数で可能なのは、そのプロパティの一部を変更するためにそのシェイプへの参照を取得したいのですか?他の2つのnullパラメータは何ですか? – Sindico

+0

あなたは衝突ハンドラを使いたいと思うようです。 http://chipmunk-physics.net/release/ChipmunkLatest-Docs/#Callbacks特定の種類のオブジェクトが衝突を開始または停止したときにイベントを受信するよう登録したり、その他のイベントを受信することができます。 2つのNULLパラメータは、オーバーラップする各シェイプとコンテキストポインタが渡されるコールバック用のパラメータです。 – slembcke

+0

にはバウンスを予測する方法もありますか? – Sindico

関連する問題