1

グラフィック パッケージを使用して構築された 2 つの四角形で 2D 衝突検出を実装しようとしています。残念ながら、これを処理する関数を作成するために必要なロジックを理解していないと思い始めています。

以下は、小さなスプライトと他のいくつかの長方形を描画する私のコードです。私のスプライトはキーボード入力で動きます。

私はいくつかの本を使用し、Nehe などのサイトも試しました。これらは非常に優れたチュートリアルですが、3D 衝突を直接扱っているようにしか見えません。

上記の長方形を使用して衝突検出を実装する効率的な方法を教えてください。各オブジェクトの座標を比較する必要があることはわかっています。オブジェクトの位置を追跡し、衝突をチェックし、衝突した場合に移動を停止する方法がわかりません。

私は独学で、何日も止まっているようです。私はまったくアイデアがなく、覚えているよりも多くの Google ページを検索しました。素朴で申し訳ありません。

建設的なコメントとサンプルコードをいただければ幸いです。ありがとうございました。

    void drawSprite (RECT rect){
    glBegin(GL_QUADS);
        glColor3f(0.2f, 0.2f, 0.2f);
            glVertex3f(rect.x, rect.y, 0.0);
        glColor3f(1.0f, 1.0f, 1.0f);
            glVertex3f(rect.x, rect.y+rect.h, 0.0);
        glColor3f(0.2f, 0.2f, 0.2f);
            glVertex3f(rect.x+rect.w, rect.y+rect.h, 0.0);
        glColor3f(1.0f, 1.0f, 1.0f);
            glVertex3f(rect.x+rect.w, rect.y, 0.0);
    glEnd();
}

void drawPlatform (RECT rect){
    glBegin(GL_QUADS);
        glColor3f(0.2f,0.2f,0.0f);
            glVertex3f(rect.x, rect.y, 0.0);
        glColor3f(1.0f,1.0f,0.0f);
            glVertex3f(rect.x, rect.y+rect.h, 0.0);
        glColor3f(0.2f, 0.2f, 0.0f);
            glVertex3f(rect.x+rect.w, rect.y+rect.h, 0.0);
        glColor3f(1.0f, 1.0f, 0.0f);
            glVertex3f(rect.x+rect.w, rect.y, 0.0);
    glEnd();
}
4

2 に答える 2

1

浮動小数点の精度の問題があるため、衝突を検出してもそこまで到達しません。できることは、四角形間のオーバーラップを検出することです。そのようなオーバーラップが発生した場合、衝突はすでに発生しているため、四角形を互いに突き合わせることができます。

また、エンジンを 2 つの状態に分割する必要があります。

  1. Rects は入力によって移動します
  2. オーバーラップが検出され、検出された場合、四角形が互いに移動します
  3. シーンを表示する

2 つの四角形が重なっているかどうかの検出については、次の質問を参照してください。

2 つの長方形が重なり合っているかどうかを判断する

于 2013-03-20T14:03:30.367 に答える