Greenfoot: Bei Tastendruck und best. Wert Bild ändern

Hey, liebes Forum!
Wir haben vor kurzem in Informatik mit Java angefangen und sollen jetzt ein kleines Spiel machen, ich bin also blutiger Anfänger.
Mein Spiel: Man steuert mit WASD eine Figur durch ein Labyrinth, sieht aber vom Labyrinth nur das, was von einer Taschenlampe beleuchtet wird, die Taschenlampe hab ich einfach mit Bildern erledigt (schwarzes Bild, in der Mitte die Figur und um die Figur ein transparenter Kreis). Dabei soll die Taschenlampe natürlich auch Energie verbrauchen, was ich mit einer Variable gemacht hab, die bei 100 beginnt. Wenn diese bei 50 ist kommt das Bild mit dem halb so großen transparenten Kreis, wenn sie bei 0 ist kommt das ohne Licht. Wenn man F (die Taste, mit der man die Taschenlampe einschaltet) wieder loslässt, soll sich die Batterie wieder aufladen.
Mein Code wäre jetzt:

Java:
if(Greenfoot.isKeyDown("F")){
            setImage("Typ_100.png");
            Greenfoot.delay(10);
            batterie = batterie - 10;
        }
        else{
            setImage("Typ_0.png");
        }
        if(Greenfoot.isKeyDown("F") & batterie == 50){
            setImage("Typ_50.png");
        }
        if(Greenfoot.isKeyDown("F") & batterie == 0){
            setImage("Typ_0.png");
        }
        if(batterie == 0 & !Greenfoot.isKeyDown("F")){
            batterie = 50;
            Greenfoot.delay(100);
            batterie = 100;
        }

So weit, so gut, nur funktioniert nur der obere Teil. Wenn ich F drücke ist die Taschenlampe an, wenn ichs loslasse aus und auch die Variable zählt von 100 ab runter. Allerdings geht das bis in den negativen Bereich und die Bilder wechseln nicht, wie es eigentlich passieren soll, und auch wenn ich F loslasse lädt sich die Batterie nicht auf. Was hab ich falsch gemacht ???:L
Danke schonmal für eure Hilfe 🙂
 
Hmja, dieses Greenfoot ist immer ein bißchen schwer nachzuvollziehen: Einige Sachen sind da schon SEHR anders als bei "normaler" (Swing-) Programmierung. Was sowas wie "setImage" genau macht, ist auch nicht direkt ersichtlich.

Das ganze wird wohl (afaik automatisch, "von Greenfoot selbst") immer wieder aufgerufen. Was passiert denn, wenn man da ganz pragmatisch sowas wie
Java:
System.out.println("Start - F pressed? "+Greenfoot.isKeyDown("F")+" Battery: "+batterie);
... // wie vorher
System.out.println("End   - F pressed? "+Greenfoot.isKeyDown("F")+" Battery: "+batterie);
drumrumwickelt?
 
Ich würde es folgendermaßen versuchen:

Java:
boolean keyDown = Greenfoot.isKeyDown("F");
if(keyDown && batterie > 50) {
     setImage("Typ_100.png");
     Greenfoot.delay(10);
     batterie = batterie - 10;
} else if (keyDown && batterie == 50) {
     setImage("Typ_50.png");
} else if(keyDown && batterie == 0) {
     setImage("Typ_0.png");
} else if(!keyDown && batterie == 0) {
     // habe das Delay aufgeteilt, weil
     // sonst die Taschenlampe direkt
     // auf 50% springt.
     Greenfoot.delay(50);
     batterie = 50;
     Greenfoot.delay(50);
     batterie = 100;
}
 

Neue Themen


Zurück
Oben