# Bewegte Objekte per Mausklick entfernen



## Kayah (27. Mai 2018)

Hallo zusammen, ich hätte bezüglich eines Projekts eine dringende Frage, und zwar habe ich ein Programm, in dem Kreise, bzw. Seifenblasen über den Bildschirm fliegen, wenn sie am Rand ankommen, prallen sie ab und wenn sie gegenseitig kollidieren, prallen sie auch ab. Ziel sollte sein, dass man mit einem Mausklick auf die Blasen klicken kann und diese dann verschwinden. Ich weiß, dass dies mit einem MouseListener oder MouseAdapter zu machen ist, weiß aber nicht, wie man das genau für ein oder mehrere bewegte Objekte macht.
Da das ganze ziemlich viel Code ist, werde ich es als zip-Datei anhängen


----------



## Robat (27. Mai 2018)

Ohne deinen Code angeschaut zu haben:
Du hast sicherlich eine Klasse die eine einzelne Seifenblase darstellt (mit x-, y-Koordinate und Durchmesser/Radius). Dann machst du dir in der Klasse zusätzlich eine Methode die schaut ob ein Punkt (x,y) in der Blase liegt. (gibt es genug mathematische Formel im Internet).

Danach musst du dir beim klick die Position des Cursors holen. Die trivialste Variante wäre danach durch die Liste der Seifenblasen zu iterieren und zu schauen ob der Punkt innerhalb der Seifenblase liegt, wenn ja entfernst du diese aus der Liste.


----------



## Kayah (27. Mai 2018)

alles klar, werd es so mal versuchen, danke


----------



## Blender3D (28. Mai 2018)

In der Klasse Bubble

```
public boolean isHitPoint(Point p) {
        float x = (int) this.x - p.x;
        float y = (int) this.y - p.y;
        float diff = (float) (Math.abs(Math.sqrt(x * x + y * y)));
        return diff <= radius;
    }
```


```
// wichtig sonst stimmen die Koordinaten nicht
frame.getContentPane().add(bubbles);
// statt
frame.setContentPane(bubbles);
```


```
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

public class BubbleClickListener extends MouseAdapter {

    private BubblePanel panel;

    public BubbleClickListener(BubblePanel panel) {
        super();
        this.panel = panel;
        panel.addMouseListener(this);
    }

    @Override
    public void mouseClicked(MouseEvent e) {
        int id = panel.getClickedBubble(e.getPoint());
        System.out.println(e.getPoint() + "\t" + id);
    }
}
```

An diesen Stellen kannst Du das realisieren.


----------

