Simple Kollisionskontrolle zweier jLabels

Hallo :D
Ich bin noch ziemlich Java Einsteiger und programmiere gerade an einem kleinen Spiel.
Ohne viel drumherum gesagt: Ich muss oft eine Kollisionskontrolle zwischen 2 jLabels machen.
Natürlich kann man es auch über eine lange If-Bedingung erreichen doch bei den vielen Labels die ständig überprüft werden müssen, gibt es doch sicher eine einfachere Lösung, zB eine Methode der man die beiden Labels übergibt und die einen Boolean zurückgibt.

Falls ihr mir helfen könnt, währ es nett wenn ihr es mir mithilfe eines kleinen Codesegments eure Lösungen präsentieren könntet. Vielen Dank im Voraus, so_ein_Komischer :)
 

RalleYTN

Bekanntes Mitglied
Benutze die Klasse Rectangle. dem Konstruktor vom Rectangle übergibst du die X und Y Koordinate deines JLabels und die Breite und Höhe. Das machst du mit allen JLabels. Wenn sich deine JLabels bewegen musst dem Rectangle über die Methode move() ebenfalls sagen, dass es sich bewegen soll und wenn du überprüfen willst ob sich beide überschneiden musst du bloß die Methode intersects(Rectangle rect) aufrufen. Das sieht dann ungefähr so aus:
Java:
List<JLabel> labels = new ArrayList<JLabel>();
// Hier alle JLabels der List hinzufügen
List<Rectangle> rects = new ArrayList<Rectangle>();
// Hier alle Rectangles hinzufügen
for(int i1 = 0; i1 < rects.size(); i1++) {

    for(int i2 = 0; i2 < rects.size(); i2++) {

        if(rects.get(i1).intersects(rects.get(i2))) {

            System.out.printf("Label %d kollidiert mit Label %d\n", i1, i2);
        }
    }
}
 
Benutze die Klasse Rectangle. dem Konstruktor vom Rectangle übergibst du die X und Y Koordinate deines JLabels und die Breite und Höhe. Das machst du mit allen JLabels. Wenn sich deine JLabels bewegen musst dem Rectangle über die Methode move() ebenfalls sagen, dass es sich bewegen soll und wenn du überprüfen willst ob sich beide überschneiden musst du bloß die Methode intersects(Rectangle rect) aufrufen. Das sieht dann ungefähr so aus:
Java:
List<JLabel> labels = new ArrayList<JLabel>();
// Hier alle JLabels der List hinzufügen
List<Rectangle> rects = new ArrayList<Rectangle>();
// Hier alle Rectangles hinzufügen
for(int i1 = 0; i1 < rects.size(); i1++) {

    for(int i2 = 0; i2 < rects.size(); i2++) {

        if(rects.get(i1).intersects(rects.get(i2))) {

            System.out.printf("Label %d kollidiert mit Label %d\n", i1, i2);
        }
    }
}

Erstmal vielen Dank, aber bei mir funktioniert etwas nicht ganz. Vermutlich habe ich einen Fehler bei der Übergabe der Labels gemacht? kA....
Könntest du dein Beispiel bitte um 2 Labels mit den dazugehörigen Werten erweitern? Vielen Danke, so_ein_Komischer
 

RalleYTN

Bekanntes Mitglied
Java:
JLabel label = new JLabel(new ImageIcon(myimage1));
component.add(label);
Rectangle rect1 = new Rectangle(label.getX(), label.getY(), label.getWidth(), label.getHeight());
JLabel label2 = new JLabel(new ImageIcon(myimage2));
component.add(label2);
Rectangle rect2 = new Rectangle(label2.getX(), label2.getY(), label2.getWidth(), label2.getHeight());
if(rect1.intersects(rect2)) {
    System.out.println("KOLLISION");
}
 
Java:
JLabel label = new JLabel(new ImageIcon(myimage1));
component.add(label);
Rectangle rect1 = new Rectangle(label.getX(), label.getY(), label.getWidth(), label.getHeight());
JLabel label2 = new JLabel(new ImageIcon(myimage2));
component.add(label2);
Rectangle rect2 = new Rectangle(label2.getX(), label2.getY(), label2.getWidth(), label2.getHeight());
if(rect1.intersects(rect2)) {
    System.out.println("KOLLISION");
}

ViiiiLEN Dank, genau das habe ich mir vorgestellt, funktioniert super :D
 

RalleYTN

Bekanntes Mitglied
gern geschehen. Allerdings solltest du dir nochmal die Forumsregeln durchlesen. erst intensiv googlen dann nachfragen.
 

Oben