0

コンポーネント、特に JLabels (または ImageIcons?) の衝突を検出するにはどうすればよいですか? 私はこれを試しました:

add(test1);
test1.setLocation(x, y);
add(test2);
test1.setLocation(x1, y1);
validate();

if(intersects(test1, test2))
{
    ehealth-=50;
}

public boolean intersects(JLabel testa, JLabel testb)
{
    boolean b3 = false;
    if(testa.contains(testb.getX(), testb.getY()))
    {
        b3 = true;
    }
    return b3;
}

これを実行すると、何もしません!

を使ってRectangleいましたが、私には合いませんでした。境界線のある画像 (paint.net を使用) と imageicon の移動について考えていましたが、ImageIcon の x を取得する方法や衝突を検出する方法がわかりません。ラベルの衝突を検出する方法や場所を増やす方法もわかりません。

コンポーネント/ImageIcons との衝突検出を検索しましたが、何も見つかりませんでした。ImageIcons の x を取得する方法も検索しました。

4

2 に答える 2

5

computeIntersection()SwingUtilities のメソッドを使用してみてください。このメソッドのJavadocによると:

新しい四角形を割り当てずに、2 つの四角形の交点を計算するのに便利です。2 つの四角形が交差しない場合、返される四角形は (0,0) から始まり、幅と高さがゼロになります。

上記でできることは次のとおりです。

public boolean intersects(JLabel testa, JLabel testb){
    Rectangle rectB = testb.getBounds();

    Rectangle result = SwingUtilities.computeIntersection(testa.getX(), testa.getY(), testa.getWidth(), testa.getHeight(), rectB);

    return (result.getWidth() > 0 && result.getHeight() > 0);
}

@Jakub が提案した別の方法intersects()は、Area メソッドを使用することでした。そのためのサンプル コードは次のようになります。

public boolean intersects(JLabel testa, JLabel testb){
    Area areaA = new Area(testa.getBounds());
    Area areaB = new Area(testb.getBounds());

    return areaA.intersects(areaB.getBounds2D());
}
于 2012-09-07T21:28:57.783 に答える
3

あなたはそれを自分で書くことができます.2つの領域が重なっている場合は交差することを覚えておいてください.x座標とy座標が含まれている場合だけではありません.

もし私があなたなら、私は を使いますArea。必要なメソッドが既にcontainsあります。intersects

于 2012-09-07T21:34:29.863 に答える