soolte man bei spielen ein interface drawable haben

StrikeTom

Bekanntes Mitglied
Hallo,
Ich habe schon in einigen spieleprogrammiertutorials gesehen, dass dort für objekte im spiel ein interface drawable verwenndet wird, welches so aussieht:
Java:
public interface Drawable{
       public void drawObject(Graphics g);
}

Und das objekt sieht dann so aus:
Java:
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

Top Contributor
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

Top Contributor
Oder ganz direkt:
Code:
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

Bekanntes Mitglied
Danke erstmal aber ein Einwand hätte ich noch:

Oder ganz direkt:
Code:
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.

Wie wärs mit:
Java:
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:D:D:D
 

Marco13

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

Neue Themen


Oben