Pneismneis
Newbie
- Registriert
- Dez. 2010
- Beiträge
- 5
Hallo ;-)
Ich arbeite momentan an einem Spiel für die Schule, habe mich für Super Mario World entschieden. Es funktioniert soweit ganz gut, hatte paar Probleme bei der Kollisionsabfrage, aber konnte die auch lösen. Hab jetzt allerdings ein neues Problem. Es geht um die Lebensanzeige, die ich eigentlich für ziemlich simpel gehalten hätte.
Ich habe einen Actor - Mario, in dem habe ich die Variable "Lives" deklariert und ihr den Wert "3" zugewiesen. Dann habe ich einen neuen Actor "Lives" erstellt:
Die Funktion getLives aus der Klasse Mario sieht wie folgt aus:
In der Unterklasse "Marioworld" von "World" habe ich:
--Habe die unwichtigen Dinge mal aus dem Code genommen, nur das wesentliche geposted.--
Außerdem habe ich zu der Methode "Jump" von Mario, die ausgelöst wird wenn man die Pfeiltaste hoch drückt, ein "Lives--;" hinzugefügt, so dass immer wenn er springt ein Leben abgezogen wird (nur zum Test natürlich).
Das ganze habe ich getestet, wenn Mario springt, dann geht die Variable "Lives" eins runter, kann ich ja mit Inspizieren nachschauen, funktioniert. ALLERDINGS ändert sich der Text in der links oberen Ecke nicht.
Habe also bisschen gegooglet und rumprobiert, und denke, dass es daran liegt, dass ich nur ganz am Anfang einmal "Mario M = new Mario();" stehen habe, und das ja einfach nur bedeutet, dass "M" wie ein neuer Mario (NICHT der Mario auf dem Spielfeld) gehandhabt wird und deshalb auch kein Leben verliert. Soweit so gut. Hatte dann keine Idee, also wieder gegooglet. Dann habe ich folgendes gelesen:
ändern in:
dann in Marioworld:
Dann kann ich es aber garnicht mehr compilen, da "Mario()" kein Konstruktor ist? oO
Hat jemand eine andere Idee? =)
MfG
Pneismneis
Ich arbeite momentan an einem Spiel für die Schule, habe mich für Super Mario World entschieden. Es funktioniert soweit ganz gut, hatte paar Probleme bei der Kollisionsabfrage, aber konnte die auch lösen. Hab jetzt allerdings ein neues Problem. Es geht um die Lebensanzeige, die ich eigentlich für ziemlich simpel gehalten hätte.
Ich habe einen Actor - Mario, in dem habe ich die Variable "Lives" deklariert und ihr den Wert "3" zugewiesen. Dann habe ich einen neuen Actor "Lives" erstellt:
Code:
public class Lives extends Text {
Mario M = new Mario();
public Lives() {
GreenfootImage img = new GreenfootImage(100, 30);
img.drawString ("Lives: "+M.getLives(), 2, 20);
setImage(img);
}
public void act() {
setText(M.getLives());
}
public void setText(int text){
GreenfootImage img = getImage();
img.clear();
img.drawString("Lives: " +text, 2, 20);
}
}
Die Funktion getLives aus der Klasse Mario sieht wie folgt aus:
Code:
public int getLives(){
return Lives;
}
In der Unterklasse "Marioworld" von "World" habe ich:
Code:
public Marioworld()
{
addObject(new Mario(), 10, 253);
Lives lives = new Lives();
addObject(lives, 60, 20);
}
--Habe die unwichtigen Dinge mal aus dem Code genommen, nur das wesentliche geposted.--
Außerdem habe ich zu der Methode "Jump" von Mario, die ausgelöst wird wenn man die Pfeiltaste hoch drückt, ein "Lives--;" hinzugefügt, so dass immer wenn er springt ein Leben abgezogen wird (nur zum Test natürlich).
Das ganze habe ich getestet, wenn Mario springt, dann geht die Variable "Lives" eins runter, kann ich ja mit Inspizieren nachschauen, funktioniert. ALLERDINGS ändert sich der Text in der links oberen Ecke nicht.
Habe also bisschen gegooglet und rumprobiert, und denke, dass es daran liegt, dass ich nur ganz am Anfang einmal "Mario M = new Mario();" stehen habe, und das ja einfach nur bedeutet, dass "M" wie ein neuer Mario (NICHT der Mario auf dem Spielfeld) gehandhabt wird und deshalb auch kein Leben verliert. Soweit so gut. Hatte dann keine Idee, also wieder gegooglet. Dann habe ich folgendes gelesen:
Code:
public Mario(){
//unwichtiger Code
}
ändern in:
Code:
private Mario myMario;
public Mario(Mario mario){
//unwichtiger Code
myMario = mario;
}
dann in Marioworld:
Code:
public Marioworld()
{
Mario mario = new Mario();
addObject(mario, 10, 253);
Lives lives = new Lives();
addObject(lives, 60, 18);
}
Dann kann ich es aber garnicht mehr compilen, da "Mario()" kein Konstruktor ist? oO
Hat jemand eine andere Idee? =)
MfG
Pneismneis