1

2Dゲームを作っています。Bitmap で作成されたオブジェクト (楕円、三角形など) がたくさんあります。衝突を検出します。今、私はこのような長方形でのみそれを行うことができます:

int x, y;
...
if(x>=bmp.getX() && x<=bmp.getX()+bmp.getWidth()
    && y>=bmp.getY() && y<=bmp.getY()+bmp.getHeight()) {
   //Collision.
}   

しかし、1 つ問題があります。別の図形 (楕円形、三角形など) でそれを行う方法がわかりません。どんなアイデアでも大歓迎です。ありがとうございました。

4

4 に答える 4

2

簡単な解決策は、サブ長方形を使用して衝突を計算することです。サブ長方形はオブジェクト全体をカバーすることはできませんが、ほとんどをカバーできます。

この画像は私の言いたいことを示しているはずです。飛行機の衝突検出にいくつかの長方形を使用しています

ここに画像の説明を入力

別のオプション (推奨されませんが) は、ピクセルごとの色の衝突を使用することです。三角形の色付きのピクセルが楕円形の色付きのピクセルを横切る場合、衝突が発生します。これは計算コストが高いことに注意してください。

于 2012-10-01T10:34:06.067 に答える
2

1) ほとんどの図で、エッジの交点の式を試してさらに見つけます。つまり
、2 つの線分が交差する場所をどのように検出しますか?
2) 円ではなく円の交点については、円の中心から端までの距離を試してください
。線分が円と交差しているかどうかを確認する方法は?
3) 2 つの円の交点が最も簡単です。両方の中心間の距離が半径の合計よりも小さいことを確認してください。

于 2012-10-01T10:41:51.127 に答える
0

私はあなたと同じ問題に直面しましたが、不規則な形でした。問題を解決する方法:

Shapeのリストを含むクラスを作成しますRectangles

ゲームオブジェクトを最初に作成するときは、Shapeが形成されるように、リストに長方形を追加する必要があります。

衝突検出のために。1つのrectをチェックするだけでなく、リスト内のすべてのrectを繰り返し処理します。

これがお役に立てば幸いです。

于 2012-10-01T10:44:25.483 に答える
0

楕円形の場合、次を使用できます:-

if((Math.pow(x, 2) / Math.pow(a, 2)) + (Math.pow(y, 2) / Math.pow(b, 2)) < 1) {
     /** Point (x, y) is inside Oval **/
}

Triangleの場合、それは少し簡単な作業です: -

このリンクにアクセスしてください

于 2012-10-01T10:32:08.173 に答える