Swing Gegner Konstruktor Problem

Kayuke

Mitglied
Guten Tag, ich schreibe ein 2d Helikopter Spiel, dort sind Gegner welche eine ArrayList schuesse bekommen, bzw. jedesmal wenn ein Schuss von einem Gegner gegeben wird, wird eine Instanz aus der Klasse schuesse gemacht und in die ArrayList schuesse von Gegner eingetragen.

Das Problem ist nun das sobald ein neuer Gegner generiert wird (z.B. 2 stück tauchen gleichzeitig auf) dann wird anscheinend die ArrayList schuesse überschrieben von den Gegnern bisher.

Ein Beispiel wie die Gegner Klasse aufgebaut ist:
Java:
import java.awt.Image;
import java.util.ArrayList;


public class gegner {
	int x,y;
	Image pic;
	static ArrayList schuesse;
	
	public gegner(int x, int y, Image pic){
		this.x = x;
		this.y = y;
		this.pic = pic;
		schuesse = new ArrayList();
	}

    public void fire(){
            Schuss z = new Schuss(x,y);
            schuesse.add(z);
    	}
    }
}

Mit dem Code - Wenn ich eine Instanz aus gegner erstelle und dann hol ich mir die ArrayList raus mit z.B. a.schuesse, wie kann das sein das ich nur eine globale ArrayList schuesse habe für alle gegner, statt das bei jeder Instanz eine neue ArrayList schuesse für jeden Gegner generiert wird?

Also ich denke das dies passiert, da ich sonst meinen Fehler nicht finde und alles nun bestimmt 10x geprüft habe.

Ist etwas schwer zu erklären, aber wenn jemand versteht was ich meine, wäre es super mir weiterzuhelfen 🙂
 
Zuletzt bearbeitet:
Mal abgesehen davon, das du sämtliche CodeConventions missachtest und direkt auf Felder zugreifst, anstatt die Zugriffe über getter/setter zu kapseln liegt dein Problem daran, dass die ArrayList static ist.

Und nicht nur static, du überschreibst du ArrayList auch noch bei jeder Erzeugung eines Gegner-Objekts.

Mach die ArrayList non-static, dann hast du pro Gegner eine Liste von Schüssen.
 
Danke für die Antwort... Problem gelöst 😛
Ich habe getter und setter für alles, das oben war nur nen Beispiel das ich schnell hier neu geschrieben habe um mein Problem zu zeigen 🙂

Static entfernt und es läuft 😀
Danke vielmals 🙂
 

Zurück
Oben