Tower Defense mit Gamegrid von aplu

Gurmor

Mitglied
Hallo

Ich versuche gerade ein Tower Defense mit Gamegrid von aplu zu programmieren.
GameGrid

Aber es kommt immer bei isinGrid und bei getLocation eine Fehlermeldung, das ein Actor nicht teil von gamegrid ist.

(kann ich irgendwo bilder hochladen ohne mich anzumelden?)

Jedenfalls sieht der Problemmachende Code so aus:

Java:
for (int i = 0; i<2;i++){	
			
			if (ziel.isInGrid()&&this.isInGrid()){
			setDirection(this.getLocation().getCompassDirectionTo(ziel.getLocation()));
			}
			move();
		
			if(map.isActorColliding(this, ziel)){					
             System.out.print("Hit");
				
				ziel.leben = (ziel.leben-schaden);
				this.removeSelf();				
			}
		}

Das befindet sich in der act-Methode des Pfeils.
Der Peil soll verschwinden, wenn es das Ziel trifft.

edit: java ist so s******e XD, ich lerne schon seit einem jahr und kann noch gar nichts.

edit2:
hier habt ihr mehr code:

Creep-Klasse
Darauf schiesst der Turm.

Java:
public class Creep extends Actor{
	int reihenfolge;
	int leben = 300;											// Leben des Monsters.
	
	public void act(){
		if (leben <= 0){									// Wenn das Leben null oder weniger ist...
			this.removeSelf();									// Entfernt den Actor aus dem Gamegrid.
		} else {
			move();												// Bewegt den Actor. Eine Bewegung nach rechts ist Standard.
			if (getLocation().x>800 || getLocation().x<0){		// Wenn sich das Monster bei einer x-Koordinate ausserhalb des Gamegrids befindet...
				turn(180);										// Verändert die Bewegrichtung um 180 Grad.
			}
		}
	}
	
	// Das ist der Konstruktor der Creep-Klasse.
	public Creep(int reihenfolge){
		super(true, "L:/Einf/Bilder/Creep.gif");
		this.reihenfolge = reihenfolge;
		// Führt den Konstruktor der Actor-Klasse aus, dem die Drehbarkeit der GIF-Datei und die GIF-Datei übergeben wird.
	}

	public Creep() {
		super(true, "L:/Einf/Bilder/Creep.gif");
	}
}

Turm Klasse
Java:
public class Tower extends Actor {
	Creep ziel;											// Das Ziel des Turms.
	int schaden = 1;									// Schaden, der der Turm machen kann.
	int abschussfrequenz;								// Frequenz, mit der der Turm Pfeile abschiesst.
	Map map;											// Das dem Turm zugehörige Gamegrid.
	
	// Das ist der Kontruktor der Tower-Klasse.
	public Tower (Map map, Creep ziel){
		super(true,"L:/Einf/Bilder/Turm.gif");			
		// Führt den Konstruktor der Actor-Klasse aus, dem die Drehbarkeit der GIF-Datei und die GIF-Datei übergeben wird.
		this.map = map;									
		// Weisst dem zu erstellenden Objekt das Gamegrid, das dem Konstruktor als Argument übergebene Gamegrid zu.
		this.ziel = ziel;								
		// Weisst dem Ziel des zu erstellenden Objekts, das dem Konstruktor als Argument übergebene Ziel zu.
	}
	
	public void act (){
		if (nbCycles % 10 == 0){										// Wenn die Simulationsschritte durch 10 teilbar sind...
			try {
				if (ziel==null){
					ziel = map.monster.get(map.monster.indexOf(ziel)+1);
					map.addActor(new Pfeil(map,ziel, schaden),getLocation());
				} else {
					map.addActor(new Pfeil(map,ziel, schaden),getLocation());
				}
				// Fügt dem Gamegrid einen neuen Pfeil hinzu, dem der Schaden und das Ziel des Turmes übergeben wird
				// Der Pfeil wird an der Stelle platziert, an der sich der Turm befindet.
			} catch (Exception e){
				
			}
		}
	}
}

Pfeil Klasse

Java:
public class Pfeil extends Actor{
	Map map;
	Creep ziel;													// Ziel des Pfeils.
	int schaden = 1;											// Schaden des Pfeils.
	int flächenschadenradius = 0;								// Radius des Flächenschadens.
	
	public void act(){
		//if (!(this.isRemoved())){
		for (int i = 0; i<2;i++){								// For-Schleife mit 2 Iterationen.
			//if (ziel.isRemoved()){
				//ziel = map.monster.get((map.monster.indexOf(ziel))+1);
			//}
			if (ziel.isInGrid()&&this.isInGrid()){
			setDirection(this.getLocation().getCompassDirectionTo(ziel.getLocation()));
			}
			move();
		
			if(map.isActorColliding(this, ziel)){				// Wenn sich der Pfeil an der gleichen Position wie sein Ziel befindet...					System.out.print("Hit");
				
				ziel.leben = (ziel.leben-schaden);					// Verringert das Leben des Ziels um den Schadenswert.
				this.removeSelf();									// Entfernt den Actor aus dem Gamegrid.
			}
		// Ändert die Bewegrichtung in die Richtung des Ziels.
		}
		//}
	}
	
	// Das ist der Kontruktor der Pfeil-Klasse.
	public Pfeil(Map map, Creep ziel, int schaden) {
		super (true, "L:/Einf/Bilder/Pfeil.gif");		
		// Führt den Konstruktor der Actor-Klasse aus, dem die Drehbarkeit der GIF-Datei und die GIF-Datei übergeben wird.
		this.ziel = ziel;								
		// Weisst dem Ziel des Objekts, das dem Konstruktor als Argument übergebene Ziel zu.
		this.map = map;
		this.schaden = schaden;							
		// Weisst dem Schaden des zu erstellenden Objekts, den dem Konstruktor als Argument übergebene Schaden zu.
	}

Sry für die vielen Kommentäre. Ist etwas übertrieben
 
Zuletzt bearbeitet:

Fu3L

Top Contributor
Da fehlt zu viel. Zumindest ein wenig mehr drumrum und die Klasse zu der Ziel gehört, dürften nötig sein.
Ich hab dieses GameGrid zwar noch nie genutzt ,denke aber, dass auch jemand, ders kennt, das so nicht beantworten könnte.
Die genaue Fehlermeldung wäre auch gut.

edit: java ist so s******e XD, ich lerne schon seit einem jahr und kann noch gar nichts

Den Kommentar verkneife ich mir^^ :D
 

Fu3L

Top Contributor
Vermutung:

Java:
public void act(){
        //if (!(this.isRemoved())){
        for (int i = 0; i<2;i++){                               // For-Schleife mit 2 Iterationen.
            //if (ziel.isRemoved()){
                //ziel = map.monster.get((map.monster.indexOf(ziel))+1);
            //}
            if (ziel.isInGrid()&&this.isInGrid()){
            setDirection(this.getLocation().getCompassDirectionTo(ziel.getLocation()));
            }
            move();
        
            if(map.isActorColliding(this, ziel)){               // Wenn sich der Pfeil an der gleichen Position wie sein Ziel befindet...                   System.out.print("Hit");
                
                ziel.leben = (ziel.leben-schaden);                  // Verringert das Leben des Ziels um den Schadenswert.
                this.removeSelf();                                  // Entfernt den Actor aus dem Gamegrid.
            }
        // Ändert die Bewegrichtung in die Richtung des Ziels.
        }
        //}
    }

Du entfernst den Pfeil (this) vom Spielfeld und dann lässt du das ganze nochma mit dem gleichen Pfeil durchführen ( // For-Schleife mit 2 Iterationen.), der dann ja nicht mehr Teil des Spielfeldes ist. Würde den Wortlaut der Fehlermeldung erklären.
 

Gurmor

Mitglied
Neues Problem:
Meine Monster sind Kreise. Im Moment haben sie einfach ein Sprite-Bild, das so aussieht wie ein Kreis.

Ich würde nun gerne machen, dass die Monster, wenn sie Leben verlieren, die Farbe ändern. Dazu möchte ich nicht viele Sprites erstellen, sondern die Farbe berechnen lassen.
Die Farbe soll von grün linear zu rot werden.

Ich finde aber in der Dokumentation zu Gamegrid keinen Konstruktor für Graphics, nur welche mit Sprites.
Ist es nun unmöglich?

Java:
public Creep(int reihenfolge){
		super(true, "E:/Einf/Bilder/Creep.gif");
		this.reihenfolge = reihenfolge;
	}
 

Ähnliche Java Themen

Neue Themen


Oben