This site requires JavaScript, please enable it in your browser!
Greenfoot back
JesusJesus
JesusJesus wrote ...

2013/6/25

Change World and change back to the first World

1
2
JesusJesus JesusJesus

2013/6/25

#
Hey, I have a question. I want to Change the world, that when it is changing back to the first world, the first World dont loses the actual Game stats. The first World should not create the map new, it should take the actually created map. In my example I have the main World "Map" and another World called "MarioWorld". I changed the World first like this:
Greenfoot.setWorld(new MarioWorld());
(It is in the Shooting class of the Player) and then the code back from the MarioWorld to the Map:
Greenfoot.setWorld(new Map());
I think the Problem is with the "new Map/MarioWorld" in the code but i dont know what to write therefore. Thanks PS: Sry for my miserable English :P I hope you can understand me...
Kartoffelbrot Kartoffelbrot

2013/6/25

#
Yes you are right. The problem is, that you create a new Map. So you have to give the Map to your player. The constructor of MarioWorld should be like this:
Map firstWorld;

public MarioWorld(Map map)
{
firstWorld = map;
}
So when you create the MarioWorld, the Map has to tell the MarioWorld itself, like Greenfoot.setWorld(new MarioWorld(this)); Then the Map isn't lost, only saved into the firstWorld variable of MarioWorld. Then your player can ask for it:
public class Player
{
//your stuff
Greenfoot.setWorld(getWorld().firstWorld);
//your stuff
}
JesusJesus JesusJesus

2013/6/25

#
Hey danke erstmal, deinem Namen kann ich glaube ich entnehmen dass du Deutsch kannst. Das erste verstehe ich, aber dann im zweiten, muss ich dann irgendwie der Map sagen, was sie der Spielerklasse sagen soll wenn sie fargt? Sry aber das verstehe ich nicht ganz. Ich habe die Codes eingefügt, aber so ja noch nichts an der Map Welt gemacht.
Kartoffelbrot Kartoffelbrot

2013/6/25

#
Ja genau. Wenn die Map die Mariowelt erzeugt übergibt sie sich selbst an diese. Dass heißt die Map ist in der MarioWelt in der Variable firstWorld gespeichert. Diese Variable, also die Welt, kann Player dann einfach aufrufen und diese wieder als Welt setzen. Allerdings ist mir ein kleiner Fehler beim zweiten Teil unterlaufen. Es muss Greenfoot.setWorld((MarioWorld)getWorld().firstWorld); heißen. Mit getWorld() ruft der Player die Welt ab. Mit dem MarioWorld in den Klammern davor sagst du ihm, dass es sich bei der Welt von getWorld() um eine Mariowelt handelt. So kann er dann auch auf ihre Variablen und Methoden zugreifen, was du dann auch mit .firstWorld tust. Der Punkt meint, dass das Objekt etwas ausführen bzw widergaben soll, in diesem Falle firstWorld. Mit der Klasse Map selbst musst du eigentlich nichts machen. Nur den veränderten Konstruktor von MarioWelt berücksichtigen, der eine Map verlangt, sodass sich die Map einfach selbst übergibt und so in der Mariowelt speichert. Tut mir Leid wenn du davon schon irgendwas wusstest, aber so ist immerhin alles erfasst. Frag, wenn noch etwas unklar ist.
JesusJesus JesusJesus

2013/6/25

#
Okay jetzt kommt das Problem, dass wenn ich Mariowelt "public MarioWorld(Map map) einsetze, dann funktioniert es nicht mehr, dass der Spieler mit "Greenfoot.setWorld(new MarioWorld());" die Welt wechselt (geht schon beim compilen nicht) und wenn ich da einfach "Greenfoot.setWorld(new MarioWorld(Map map)); einsetze, dann geht es auch nicht...
JesusJesus JesusJesus

2013/6/25

#
Kleine Korrektur: wenn ich nur Greenfoot.setWorld(new MarioWorld()); einsetze dann geht es an dieser Stelle soweit, allerdings tritt beim compilen in der Marioklasse (Spieler in der Mariowelt, der durch eine bestimmte Aktion die Welt zurückwechseln soll) bei Greenfoot.setWorld((MarioWorld)getWorld().firstWorld); ein Fehler auf, cannot find Symbol - variable firstWorld.
Kartoffelbrot Kartoffelbrot

2013/6/25

#
Ok, zum ersten Problem: Dann mach einen zweiten Konstruktor, also einmal:
public MarioWelt()
{
firstWorld=null;
}

// und

public MarioWelt(Map map)
{
firstWorld=map;
}
Das Map map bedeuter, dass ein Objekt der Klasse Map übergeben werden muss. Deshalb kannst du dort auch nicht einfach Map map einsetzen. Da du das aber nur für das zurueckgehen brauchst. Hast du jetzt auch den anderen Konstruktor, sodass du auch eine Map einfach so erzeugen kannst. 2.) Hast du vielleicht vergessen Map firstWorld; in die MarioWorld zu schreiben? Oder hast du dich irgendwo verschrieben? Wenn nicht probier das:
MarioWelt welt = (MarioWelt) getWorld();
//die aktuelle Welt (Die Mariowelt) ist jetzt in der variable welt gespeichert
if(welt.firstWorld!=null)
//hier wird geprueft, ob es überhaupt eine gespeicherte Map gibt
{
Greenfoot.setWorld(welt.firstWorld);
}
Kartoffelbrot Kartoffelbrot

2013/6/25

#
Du hast dich wohl nicht verschrieben. Der Fehler lag bei mir, hab ihn jetzt gefunden. Nimm einfach das Neue. Bei meinem alten Vorschlag konnte er firstWorld nicht finden, weil getWorld() die Variable widergeben sollte, wobei die normale Klasse Welt bei Greenfoot die Variable firstWorld gar nicht hat. Das war ohnehin komplett falsch. Da hatte ich einfach einen Denkfehler.
JesusJesus JesusJesus

2013/6/25

#
Ich habs alles soweit versucht, aber ich glaub ich bin da grade etwas blöd... Ich krieg das nicht hin. Vllt kannst du dir ja mal das ganze Spiel anschauen, mit dem normalen Welt wechsel ist die hier :Spiel der code ist öffentlich
Kartoffelbrot Kartoffelbrot

2013/6/26

#
Wieso ist das denn auf einem anderen Account hochgeladen?
Kartoffelbrot Kartoffelbrot

2013/6/26

#
Wenn du mir sagst wo genau die Befehle zum ändern der Welt stehen, versuche ich mich darum zu kümmern. Ich finde die nämlich nicht.
JesusJesus JesusJesus

2013/6/26

#
Das ist auf einem anderen Account weil wir das in der Schule machen, und das der Account meiner Gruppe ist, und der hier ist mein persönlicher. Der code zum wechseln in die MarioWorld steht in der Shoot1 klasse bei intersecting object car, und der wechsel in die Map zurück steht in der Mario Klasse wenn der mit der Ziel Klasse reagiert. Würde mich sehr freuen wenn du es versuchen würdest :) ich folge dir auch jetzt mal auf Greenfoot... PS: wenn du noch Fragen hast frag bitte einfach will versuchen alle einigermaßen zu beantworten.
Kartoffelbrot Kartoffelbrot

2013/6/27

#
Ok danke, ich kümmer mich drum.
JesusJesus JesusJesus

2013/6/27

#
Vielen vielen Dank schonmal :)
JesusJesus JesusJesus

2013/6/27

#
Nur aus Interesse. Wie siehts aus bekommst du es hin?
There are more replies on the next page.
1
2