0

つまり、基本的に、私は最初のxnaゲームを実行しており、それはアルカノイドゲームです。今の私のボールは回転する正方形です。

残念ながら、xnaで回転した長方形の衝突を正しく検出することは不可能です。

私はスカラーについてのことを見つけましたが、私は大学のコンピュータサイエンスにしかいないので、これらの大きな数学については知りません...

誰かが私にこの種の衝突を検出する正しい方法を指示できますか?または、少なくとも、この長方形の衝突を検出できるように、正しい方法で新しい長方形を取得できるようにするためですか?

編集 私は回転する正方形を静止した正方形にして、外側の正方形との衝突をテストすることを考えましたが、それは実行可能でしょうか?

4

2 に答える 2

1

正方形のボールと外側の長方形の衝突を検出する場合は、ボールの4つの角の座標を知る必要があります。次に、これらの点を外側の長方形と単純に比較します。

は長方形の辺sの長さです。コーナーは次のように計算できます。

double h = 0.707106781 * s; // Half diagonal
double angle = rotation_angle + 0.25 * Math.PI; // 0.25 * Math.PI = 45 degrees
                                                // inclination of the diagonal.
double x = h * Math.Cos(angle);
double y = h * Math.Sin(angle);

// The four points are
p1x = +x + squareCenterX;
p1y = +y + squareCenterY;

p2x = -y + squareCenterX;
p2y = +x + squareCenterY;

p3x = -x + squareCenterX;
p3y = -y + squareCenterY;

p4x = +y + squareCenterX;
p4y = -x + squareCenterY;
于 2012-12-13T21:27:43.027 に答える
0

あなたは本当にあなたのボールを正方形にしたいですか?または、単純なサークルで実行できますか?

代わりに衝突円を使用できます。衝突の背後にあるロジックは、回転した正方形よりもはるかに単純です...(正方形とピクセル単位の完全な衝突が本当に必要な場合は、この回答を無視して、Terranceのコメントを参照してください)

if(circle.Center.X - circle.Radius < ScreenBounds.XMin || 
    circle.Center.X + circle.Radius > ScreenBounds.XMax ||
    circle.Center.Y - circle.Radius < ScreenBounds.YMin || 
    circle.Center.Y + circle.Radius > ScreenBounds.YMax)
{
     //Ball is partly or entirely outside of the screen
}

これは実際にはあなたの質問に対する直接の答えではありませんが、より多くの選択肢です

編集:このコードは、ボールの位置がその中心を基準にしていることを前提としています。

また、回転した正方形と衝突円(または実際には回転していない正方形)との衝突を近似することもできます。衝突はピクセルパーフェクトではありませんが、ほとんど目立たないと思います。また、実装も簡単になります(これが初めてのゲームであることを考えると)。

于 2012-12-13T21:04:31.343 に答える