Logikproblem Spieleentwicklung

TimeIsTheKey

Aktives Mitglied
Hallo

Ich habe ein Logikproblem. Ich weiss nicht so recht wie ich es am besten erklären soll, damit ihr mich versteht. Ich habe eine Klasse die AnimatedSprite heisst. Mit ihr kann man einen Akteur "erschaffen" (mit oder ohne Animation) und ihn bewegen und handeln. Eine weitere Klasse von mir heisst GameAni. Sie ist für den Spielablauf zuständig. Bis jetzt hatte ich alle Akteure mit der Klasse AnimatedSprite gemacht, aber ich möchte nun verschiedene Klassen machen die von AnimatedSprite erben und diese anpassen.
Mein Problem ist, dass ich alle Akteure bis jetzt in einem ArrayList gespeichert habe und dann mittels for-Schleife (gibt ja dieses spezielle for für ArrayListen) darüber iteriert bin.

Mein Problem ist jetzt das ich es irgendwie hinkriegen muss die verschiedenen Klassen in einer ArrayListe zu speichern und über diese zu iterieren. Meine Subklassen sähen etwa so aus:
http://img59.imageshack.us/img59/9260/logikprob.png

Wie kann ich das jetzt machen? Wenn ich ein ArrayList habe das auf Actor gecastet ist, kann ich nur auf Methoden zugreifen die Actor hat, oder?
 
E

efsertsf4535

Gast
Dann leitest du von einer (abstrakten) Basisklasse ab, die die Funktionalität bietet, die alle Sprites haben sollen. Deine Liste ist dann vom Typ dieser Klasse
 

TimeIsTheKey

Aktives Mitglied
Erbst ja von AnimatedSprite, definiere darin einfach alles, was du von außen brauchst.

Ich weiss nicht ob ich es richtig verstanden habe, aber dann hätten doch alle Subklassen Methoden die sie nicht brauchen würden.

Dann leitest du von einer (abstrakten) Basisklasse ab, die die Funktionalität bietet, die alle Sprites haben sollen. Deine Liste ist dann vom Typ dieser Klasse

Das wäre eine Möglichkeit. Ich müsste dann aber pro Typ (also z.B. Player, Enemy, BackgroundElement und Fireball) eine eigene ArrayListe haben und diese dann zusammenfügen und dann über das zusammengefügte ArrayList iterieren. Seh ich das richtig?
 
E

efsertsf4535

Gast
"eine eigene ArrayListe haben und diese dann zusammenfügen und dann über das zusammengefügte ArrayList iterieren. Seh ich das richtig? "

Nein
 

Gravian

Mitglied
Du kannst ja die Methoden der Superklasse überschrieben und so eine unterschiedliche Funktionalität erzielen und trotzdem mit den Methodenaufrufen der Superklasse auskommen.
Wenn du dann wirklich mal eine Methode brauchst, die die Superklasse nicht hat, musst du dann halt feststellen, um welche Klasse es sich jetzt wirklich handelt.
 

TimeIsTheKey

Aktives Mitglied
"eine eigene ArrayListe haben und diese dann zusammenfügen und dann über das zusammengefügte ArrayList iterieren. Seh ich das richtig? "

Nein

Ich hab mir gedacht, dass ich mir ein Interface Movable mache und dann ein ArrayList von Movable habe. AnimatedSprite würde diesen Interface implementieren. Dann hätten alle Subklassen dieses Interface und so könnte ich alle in ein Arraylist tun und darüber iterieren.

So wie ich das bei dir verstanden habe, ist das ich eine abstrakte Klasse habe mit der abstrakten Methode move z.B. und das dann pro Subklasse ausimplementiere. Das ArrayList würde vom Typ AnimatedSprite sein (Super-Klasse). Allerdings muss ich die Akteure irgendwo mit ihrem richtigen Typen speichern, weil ich auch auf spezielle Methoden zugreifen möchte. Also muss ich die Listen irgendwann zusammenführen.

Du kannst ja die Methoden der Superklasse überschrieben und so eine unterschiedliche Funktionalität erzielen und trotzdem mit den Methodenaufrufen der Superklasse auskommen.
Wenn du dann wirklich mal eine Methode brauchst, die die Superklasse nicht hat, musst du dann halt feststellen, um welche Klasse es sich jetzt wirklich handelt.

Wieso könnte ich das feststellen? Hat das ArrayList den Typ der Superklasse kann ich ja nur auf die Methoden der Superklasse zugreifen. Würde es aber klappen, falls eine überschriebene Methode auf eine Methode der Subklasse zugreift? Verstehst du was ich meine? ^^"
 

Ähnliche Java Themen

Neue Themen


Oben