# soolte man bei spielen ein interface drawable haben



## StrikeTom (17. Nov 2010)

Hallo,
Ich habe schon in einigen spieleprogrammiertutorials gesehen, dass dort für objekte im spiel ein interface drawable verwenndet wird, welches so aussieht:

```
public interface Drawable{
       public void drawObject(Graphics g);
}
```

Und das objekt sieht dann so aus:

```
public class Gegner implements Drawable{
           public void drawObject(Graphics g){
            g.drawOval(x, y, 10, 10);
             }
}
```
Warum lässt man das interface nicht einfach weg?
Das wäre doch das gleiche, oder?

Danke


----------



## eRaaaa (17. Nov 2010)

Interfaces haben eben einen Sinn. (nachlesen!)Hier z.B., dass du eben in der konkreten Implementierung einfach sagst wie es gezeichnet werden soll und dann einfach alle zu zeichnenden Objekte in eine Liste<Drawable> ablegen kannst. Dort können nun irgendwelche Objekte liegen, nicht nur Gegner, sondern alle die das Interface implementieren. in der paintComponent beispielsweise könntest du jetzt einfach über die Liste iterieren und drawObject aufrufen und somit wird deine Szene gemalt ohne dass die Methode oder andere Klassen Wissen über das genaue Zeichnen haben. 
Willst du jetzt ein Haus neben dein Gegner malen, implementierst du einfach das Interface, und legst das Objekt in die Liste. Das wars 
(gibt sicherlich noch einige Threads/Beiträge die das etwas ausführlicher beschreiben, einfach mal Suchen, evtl. nicht auf Grafik versteifen, sondern allgemein nach "Programmieren gegen Schnittstellen")


----------



## Marco13 (18. Nov 2010)

Oder ganz direkt:

```
public class Gegner {  public void drawObject(Graphics g){... }}
public class Spieler {  public void drawObject(Graphics g){... }}

class Zeichner
{
    private List<[b]TjaWasDennNun?[/b]> dingeDieGezeichnetWerden;
...
```
-> Dort steht dann "Drawable", und alles ist gut.


----------



## StrikeTom (18. Nov 2010)

Danke erstmal aber ein Einwand hätte ich noch:



Marco13 hat gesagt.:


> Oder ganz direkt:
> 
> ```
> public class Gegner {  public void drawObject(Graphics g){... }}
> ...



Wie wärs mit:

```
public class Objekt{public void drawObject(Graphics g){...}
public class Gegner extends Objekt{  public void drawObject(Graphics g){... }<--Überschrieben}
public class Spieler extends Objekt{  public void drawObject(Graphics g){... }<--Überschrieben}

class Zeichner
{
    private List<[b]Objekt[/b]> dingeDieGezeichnetWerden;
```

Wäre das nicht das gleiche?
Sonst hab ich das mit dem Drawable auch verstanden und umgesetzt


----------



## Marco13 (18. Nov 2010)

Das geht natürlich auch, allerdings sind Interfaces flexibler: Man kann nur von EINEM Objekt erben, aber beliebig viele Interfaces implementieren.


----------



## StrikeTom (18. Nov 2010)

Danke
*Und* man kann auch objekte machen die nicht gezeichnet werden(z.B. starker wind der den spieler wegbläst oder so)


----------

