1

最近、自分のゲームに優れた衝突検出システムを実装することに取り組んでいます。ゲームに実装する前に、一種のシミュレーションを行うことにしました。私は多くのチュートリアル (主にthis one ) に従いましたが、動作させることができます。私はそれを一歩一歩たどりましたが、エラーがオーバーラップにあるのか (2​​ つのプロジェクションがオーバーラップしているかどうかを確認する)、コード自体にあるのかわかりません。

このコードには、Vector2D と ConvexPolygon の実装も含まれています。コードは次のとおりです。

http://pastebin.com/whV31SDi

かなり長いのでペーストビンに貼り付けます。

4

3 に答える 3

1

あなたが言うように、コードはかなり長く、私はそれをすべて見ていませんでした. しかし、2つのエラーが突き出ました

1) あなたoperator-は後ろ向きです

    Vector2D& operator - (const Vector2D& other)
    {
            Vector2D resultant;
            resultant = Vector2D(other.x - this->x,other.y - this-> y);
            return resultant;
    }

する必要があります

    Vector2D& operator - (const Vector2D& other)
    {
            Vector2D resultant;
            resultant = Vector2D(this->x - other.x, this->y - other.y);
            return resultant;
    }

2) コードには多くのスタイルの問題があります。最大のものは、ローカル変数への参照によってすべての値を返すことです。関数が戻った後に変数が存在しなくなるため、それは単にトラブルを求めているだけです。これはあなたoperator+の例を書くためのより良い方法です

   Vector2D operator+ (const Vector2D& other) const
   {
            return Vector2D(other.x + this->x, other.y + this->y);
   }

operator+対称演算子のようなものは、クラスメンバーではなくグローバル関数である必要があるため、まだ完全ではありませんが、あなたが持っているものよりも優れています。

于 2012-09-01T11:07:21.293 に答える
0

オーバーラップがあるかどうかをチェックするためにブール関数を使用しているという事実に関係していると思います。

for ループでは、形状が重なり合わないたびに関数を終了し、for ループが最初からやり直して同じ場所で終了します。void 関数に変更します。

そのコードをすべて徹底的に読んだわけではないので、私は間違っている可能性がありますが、私は自分自身でその問題を抱えていました.

于 2014-06-17T12:06:27.880 に答える