Ob dein spieler ein bestimmtes Material berührt prüfst du am besten so:
Statt EndMaterial.class must du natürlich wieder den Klassennamen einsetzen den du verwendest.
Um ein neues Level zu beginnen gibt es mehrere Möglichkeiten.
Die einfachste ist glaube ich eine neue welt zu erstellen:
Dazu brauchst du mehrere unterklassen von World (eine pro Level). Jede Welt entspricht dann einem Level. Das nächste Level beginnst du so:
Dieser code macht aber leider dass du nur nach level 2 wechseln kannst. Um in jedes Level zu wechseln wird es etwas komplizierter:
Eine andere Möglichkeit ein neues Level zu starten (wenn man mehrere level verwendet ist diese warscheinlich doch einfacher):
Deine Level construierst du mit methoden in deiner welt klasse (public void level1(), public void level2(), ...).
Wenn du dann das end material erreichts startest du das neue level so:
public boolean touchingEndZone() { return getOneObjectAtOffset(0, 0, EndMaterial.class) != null; }
//in deiner spieler Klasse; public void act() { //... if (touchingEndZone()) { Greenfoot.setWorld(new Level2()); } }
//in deiner spieler Klasse; public void act() { //... if (touchingEndZone()) { if (getWorld() instanceof Level1) {//wenn du in level 1 bist ...; Greenfoot.setWorld(new Level2()); //... starte level 2; } else if (getWorld() instanceof Level2) { //wenn du in level 2 bist ...; Greenfoot.setWorld(new Level3()); //... starte level 3; } //viele, viele if anweisungen; } }
public void act() { //... if (touchingEndZone()) { getWorld().startNextLevel(); } }
//in deiner welt Klasse; private int levelNumber = 1; public void startNextLevel() { removeAllObjects(); switch (levelNumber) { case 1://level 1; startLevel2(); levelNumber = 2; break; case 2://level 2; startLevel3(); levelNumber = 3; break; } } public void removeAllObjects() { removeObjects(getObjects(null)); }