Greenfoot Actor World Beziehung
Leider können sich meine Actor Klassen nicht auf Variablen in der World Klasse beziehen. Aber irgendwie ist das doch sicherlich möglich, oder? Wie genau mache ich das, dass sich die Variablen in der World verändern, wenn sie den Befehl vom Actor bekommen?
3 Antworten
Hey, Ich habe auch recht lange mit Greenfoot gearbeitet und vor etwa einen Jahr sogar einen kleinen Greenfoot klon programmiert.
Zu deiner Frage: um auf variablen deiner Weltklasse zuzugreifen musst du sie folgt vorgehen: Die abstrakte Oberklasse Actor implementiert die Funktion getWorld(). Diese liefert allerdings auch nur ein Objekt der abstrakten World - Klasse, von der deine Weltklasse erben sollte. Da die Variablen auf die du zugreifen willst jedoch nur in deiner Weltklasse existieren musst du explizit angeben, dass es sich um eine solche handelt. Dies realisiert du mit einem Cast. Entsprechend: ((DeineWelt) getWorld()).variable
Das funktioniert solange sich der actor tatsächlich in der Welt "DeineWelt" befindet. Ansonsten wird dein Programm mit einer Exception abbrechen. Daher ist nicht die feine englische Art. Prinzipiell lässt es sich nahezu immer umgehen vom actor auf die Welt zugreifen zu müssen. Schöner ist eine hierarchische Struktur bei der die Welt auf actor zugreift und diese nur untereinander kommunizieren.
Hoffe Ich konnte helfen
Nun.... mit der von mir bechriebenen Methode sollte allerdings, das gewünschte Verhalten möglich sein. Könntest du vielleicht ein bisschen Sourcecode posten? Am liebsten auf http://www.pastebin.com/ und dann hier verlinken. Dann schau ich mal geschwind darüber.
Deklariere die Variable in der Welt-Klasse "static".
Dann kann ein actor mit NamederWeltklasse.Variablenname darauf zugreifen.
Variablen, die nicht auf Klassenebene liegen sind nur zwischen den beiden Klammern zugänglich, zwischen denen sie deklariert wurden.
{
int x=0;
{
System.out.println(x);//Geht
}
}
System.out.println(x);//Geht nicht.
Also gibt es nicht die Möglichkeit, World und Actor kommunizieren zu lassen?
Nicht mehr ;) Spr33d hat sie korrekt beantwortet! Der Fragesteller macht nur offensichtlich noch irgendetwas falsch
Klappt leider nicht. Ich will ja, dass die eine Actor Klasse die Variable ändert, so dass die andere Actor Klasse dadurch etwas bestimmtes macht. Jedoch ändern sich die Variablen nicht :(