ArrayList mit Objekten verwalten


#1
Hallo,

ich habe eine Liste von Objekten nämlich Sprites, die die Oberklasse von verschiedenen Einheitentypen ist mit jeweils unterschiedlichen Methoden sowie Attributen.

Für ein Echtzeitgame möchte ich meine Liste dynamisch verwalten. Ich habe das Problem, das Sprites gleichen Typs sich beispielsweise ein booleanFlag teilen (statisch), was zur Laufzeit problematisch wird, da die erste Einheit das Flag richtig hat die nächste aber nicht mehr. Außerdem kommt es bei mir zu Laufzeitproblemen wenn ich gleichzeitig vier Bauern Holzhacken und 4 Bauern Gold abbauen lasse. (und es sollen natürlich irgendwann mehrere werden).

Also, wie verwaltet man diese Liste so, dass jedes darin enthaltene Sprite sein "Eigenleben"(mir fällt grad nix besseres ein) hat?

Das ganze ist ein Warcraft2 - Klon. Die Grafiken gibt's kostenlos im Netz und ich mach mir die Arbeit nur für mich selber als Hobby. Mir ist durchaus klar das ein Klon eines älteren Games nicht wirklich zeitgemäß ist, aber das nur so am Rande.
 
#3
Wenn eine Variable oder Methode als static deklariert wird, heißt das normalerweise, dass es sich um eine Klassenvariable bzw. Klassenmethode handelt.
Meine A* Klasse mit der findPath Methode ist ebenfalls static, weil pro Einheit eben nur eine findPath-Methode aufgrufen werden soll.

Ich halte die ganzen Einheiten in einer Liste, nur wenn ich mehreren Bauern den gleichen Befehl gebe dann verhält sich mein Programm so als würde alles nur für einen Bauern gelten.
 

sheel

I love Asm
#4
Eine static-Methode ist nicht das Selbe wie eine static-Variable. static-Methoden kann man auch ganz ohne Objekt aufrufen. Aber egal ob mit oder ohne static, es gibt immer nur eine Methode, sie wird nicht pro Objekt extra abgespeichert.
Variablen gibt es eben einmal für alles zusammen (static) oder einmal pro Objekt.

Evt. würde ein Codeausschnitt dabei helfen, dass wir dein Problem verstehen.
Aber nochmal, wenn du die Variable mit dem derzeitigen Befehl eines Bauers etc. static hast, dann haben natürlich alle Bauern dasselbe. Die Lösung wäre einfach, das static wegzunehmen.
 
#5
Letzteres wusste ich auch. Ich hatte so ziemlich gar keine static-Variablen, bis auf eine Einzige. Aber ich habe das jetzt verstanden. Und ich rufe auch meine static findPath Methode ohne Objekt auf, sondern nur mit der Klasse direkt. Also das habe ich jetzt.

Ich denke, da in meiner Spriteliste alle Einheitentypen vorhanden sind, hängt das alles dennoch damit zusammen, dass mein Programm mit mehreren Einheiten laggt, was aber eigentlich sein kann, denn von jeder Klasse wird ein Objekt erzeugt, das für sich allein besteht.

Einen Codeausschnitt zu posten wäre zu unzusammenhängend, denke ich, man müsste schon das ganze Programm sehen.

Und nochmal, ich habe jetzt keine static Variablen mehr.