Greenfoot Actor World Beziehung

...komplette Frage anzeigen

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

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 :(

0
@TheEzioaltair

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.

0

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?

0
@PerfectMuffin

Nicht mehr ;) Spr33d hat sie korrekt beantwortet! Der Fragesteller macht nur offensichtlich noch irgendetwas falsch

0

Was möchtest Du wissen?