# Wie erkennt ein Objekt ein anderes?



## Stormblade (26. Okt 2012)

Hallöchen ich hab mal wieder eine allgemeine java-frage. Ich habe folgenden Code:


```
public class Klasse1 extends JFrame{
  public static void main(String[]args)
  {
    Klasse1 main = new Klasse1();
    // setSize, setVisible usw...
  }
  Klasse1()
  {
    //setSize etc...
    Klasse2 panel = new Klasse2();
    add(panel);
  }
}
 
public class Klasse2 extends JPanel{
  pubic Klasse2(){
    super();
    Figur Mario = new Figur(this);
    Mario.x = 200;
    Mario.y = 200;
    Mario.start();
    //übergabe einiger eigenschaften
  }
 
  public void paint(Graphics g){
    super.paint(g);
  }
}
 
public class Figur extends Thread{
  int x, y;
  int M_width, M_height;  //denen wird nachher noch ein wert übergeben...
  Graphics g = null;
  JPanel Mother = null; 
 
  public void paint(){
    Color c = Color.blue;
    g.setColor(c);
    g.fillRect(x, y, M_width, M_height);
  }
 
  public void Kollisionserkennung{
    boolean Überschneidung = Rect1.intersects(Rect2); //Rect1 und Rect2 wuden beide oben schon definiert
    if(Überschneidung){
      //irgendein Code
    }
  }
}
```

So, in dem Code fehlt jetzt einiges, aber meine Frage zielt darauf ab: Ich habe ja die Daten meines Rect1. Ich will ca. 10 weitere Rectangles im JPanel haben und frage mich, wie ich die Intersect-methode von Rect1 mit all diesen ausführen kann? So wie oben wird ja nur Rect1 mit Rect2 geprüft.
Wie kann ich also dieses eine "Rect2" wegbekommen und mit "allen Vierecken" ersetzen?
Wär richtig froh, wenn sich da jemand auskennt und mir helfen könnte


----------



## SlaterB (26. Okt 2012)

mehrere Objekte kann man in einer Liste organisieren,
Schleifen helfen bei Verarbeitung, hier etwa mehrfachen intersects()-Aufruf


----------



## Stormblade (26. Okt 2012)

ok, aber in intersects() muss doch in die klammer der name des 2ten rechtecks hinein. wenn ich angenommen 100 andere objekte habe, muss ich dann jedem der 100 stück einen anderen namen geben, oder gibts da ne bessere lösung?
mit listen meinst du sicher ein array oder wie?


----------



## SlaterB (26. Okt 2012)

was eine Liste ist wäre Grundwissen, Array in etwa dasselbe, auch gut,
wenn du schon Array kennst, dann doch auch hoffentlich Schleifendurchlauf, mit jedem i kommt man an array_,
das klappt

siehe auch (und dringend zu empfehlen! ) : 
http://www.java-forum.org/top-fragen/62032-fragen-variablennamen.html_


----------



## TryToHelp (26. Okt 2012)

SlaterB hat gesagt.:


> mehrere Objekte kann man in einer Liste organisieren,
> Schleifen helfen bei Verarbeitung, hier etwa mehrfachen intersects()-Aufruf



Was SlaterB meint ist, du kannst anstelle 


```
Rect rect2=new Rect();
```

es so machen

```
List listOfRects <Rect>=new ArrayList<Rect>();
```

erstellen und dann durch diese Itterieren


```
for (Rect rect : listOfRects ){
    boolean Überschneidung = rect1.intersects(rect);
}
```

übrigens Objekte klein Schreiben ;-)


----------



## Stormblade (26. Okt 2012)

Ok, dann sag ich mal vielen dank bis hierher, ich werd mir die listen mal anschauen und ein wenig rumprobieren. Hat sich ja so angehört, wie wenn die hier besser geeignet wären  
Ach ja, warum sagen mir alle, was ich groß und klein schreiben soll ^^ Darf man hier überhaupt was groß schreiben außer klassen?


----------



## TryToHelp (26. Okt 2012)

Stormblade hat gesagt.:


> Ok, dann sag ich mal vielen dank bis hierher, ich werd mir die listen mal anschauen und ein wenig rumprobieren. Hat sich ja so angehört, wie wenn die hier besser geeignet wären
> Ach ja, warum sagen mir alle, was ich groß und klein schreiben soll ^^ Darf man hier überhaupt was groß schreiben außer klassen?



Bitte, ja Listen haben den Vorteil, die sind erweiterbar von der Länge und zwar ohne komplizierte verfahren ;-)
Das hat was mit der leserlichkeit des Codes zu tun, dem Compailer ist es egal, aber wenn andere Personen drüberschauen, erkennen sie sofort, was was ist. 

So werden Klassen typischerweise geschrieben


```
MeineKlasse
```

und so Objekte


```
meinObjektDerKlasse
```

So kann jemand der dir hilft, der sich deinen Code anschaut sehen, ist das ein Objekt, eine Klasse,... auch die Namensgebung sollte sprechen sein, also nicht Klasse1, Klasse2, NochEineKlasse sondern eher was sie beinhalten Auto, Reifen,...


----------



## Robokopp (28. Okt 2012)

in Quaxli´s Tutorial wird das Konzept dieser Überschneidungen ganz gut erklärt. Dort wird zwar für die Intersection eine eingebaute Methode aus Graphics 2D verwendet, aber das tut nix zur sache.

Die Grundidee ist einfach zu prüfen, ob zwei Objekte gemeinsame Punkte haben.


----------

