17

Shape オブジェクトが別の形状と交差しているかどうかを判断する最良の方法を知りたいです。現在、長方形と交差する形状、またはその逆が含まれる限り、ゲームでの衝突検出を整理しています。私が抱えている問題は、Shape クラスの intersects() メソッドが、別の Shape ではなく、Rectangle または Point のみをパラメーターとして使用できることです。2 つの Shape オブジェクトがオーバーラップしているかどうかをテストする効率的な方法はありますか? 私が試した 1 つの方法は、for ループを使用してポイントの領域を生成し、それらが形状内にあるかどうかをテストし、次に Point オブジェクトの配列を作成して他の形状に送信してテストすることでしたが、これによりフレームレートが大幅に低下しました。不要な比較の。

ここで似たようなものを探しましたが、実際には何も見つかりませんでした。これが繰り返しである場合は、事前に申し訳ありません。

4

4 に答える 4

21

テストされていませんが、その理由は次のとおりです。

import java.awt.geom.Area;

...

public static boolean testIntersection(Shape shapeA, Shape shapeB) {
   Area areaA = new Area(shapeA);
   areaA.intersect(new Area(shapeB));
   return !areaA.isEmpty();
}

Area は Shape を実装しますが、いくつかの潜在的に有用なメソッドを追加します

于 2013-03-28T20:25:31.107 に答える
10

形状自体の境界を使用して、境界を比較することもできます。

public boolean collidesWith(Shape other) {
    return shape.getBounds2D().intersects(other.getBounds2D());
}

これは目に少し良いです。

于 2015-07-28T00:37:03.223 に答える