# Kollision von zwei ImageIcons



## Nesselbrand (4. Mrz 2020)

Gibt es einen Weg um eine Kolision von zwei ImageIcons zu erkennen?
Schonmal danke im Vorraus


----------



## Xyz1 (4. Mrz 2020)

Für jede Komponente:

```
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.Timer;
import java.util.TimerTask;

import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.WindowConstants;

public class Windows1 {
	static boolean isCollapsing(JComponent jc1, BufferedImage b1) {
		return jc1.getWidth() < b1.getWidth() || jc1.getHeight() < b1.getHeight();
	}

	public static void main(String[] args) throws IOException {
		BufferedImage b = ImageIO.read(new File("..."));
		JFrame f = new JFrame();
		JLabel l = new JLabel(new ImageIcon(b));
		f.add(l);
		f.pack();
		f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
		f.setVisible(true);

		new Timer().schedule(new TimerTask() {
			boolean on = true;
			@Override
			public void run() {
				if (on && isCollapsing(l, b)) {
					JOptionPane.showConfirmDialog(null, "");
					on = false;
				}
			}
		}, 0, 100);
	}
}
```


----------



## Nesselbrand (8. Mrz 2020)

Schon mal Danke!!! Aber was genau machen diese Code abschnitte:

```
if (on && isCollapsing(l, b)) {
                    JOptionPane.showConfirmDialog(null, "");
                    on = false;
                }
```



```
static boolean isCollapsing(JComponent jc1, BufferedImage b1) {
        return jc1.getWidth() < b1.getWidth() || jc1.getHeight() < b1.getHeight();
    }
```
Ich will den Code nähmlich verstehen befor ich ihn verwende.
Schonmal Danke im Vorraus!!


----------



## mihe7 (8. Mrz 2020)

Nesselbrand hat gesagt.:


> Gibt es einen Weg um eine Kolision von zwei ImageIcons zu erkennen?
> Schonmal danke im Vorraus


Ein ImageIcon besitzt Breite und Höhe, aber keine Position. Wie soll eine Kollision damit definiert werden?


----------



## Nesselbrand (8. Mrz 2020)

aber rechteck und Icon geht?


----------



## mihe7 (8. Mrz 2020)

Es geht alles, wenn man genügend Informationen hat. 

ImageIcon (und damit erst recht Icon) kennt nun mal keine Position. Ohne die wüsste ich nicht, wie man eine Kollision zweier ImageIcons definieren sollte. 

Kennst Du aber die Positionen von zwei Icons, dann kannst Du auch sagen, ob diese kollidieren.

Beim Rechteck (java.awt.Rectangle) sieht das anders aus, denn dort sind alle notwendigen Informationen bereits gegeben.


----------



## Nesselbrand (8. Mrz 2020)

die sache ist die ich füge ein Icon an eine bestimmte Koordinate ein und ich habe mehrere rechtecke (java.awt.Rectangle). das icon kann ich mit maustasten steuern und ich möchte nicht dass das icon über die rechtecke drübergehen kann


----------



## mihe7 (8. Mrz 2020)

Nesselbrand hat gesagt.:


> die sache ist die ich füge ein Icon an eine bestimmte Koordinate ein


Wenn Du dafür eine Komponente verwendest (z. B. JLabel), dann kennst Du die Position. Wenn Du keine Komponente verwendest, musst Du Dir die Position (bzw. gleich das Rechteck) halt merken. Und dann musst Du lediglich zwei Rechtecke auf Schnitt prüfen. Das funktioniert mit java.awt.Rectangle#intersects.


----------



## Nesselbrand (9. Mrz 2020)

```
test = new Rectangle(Var.pacX + 20,Var.pacY + 20,20,20);
```
Wie kann ich dieses Rechteck dann zeichnen?


----------

