Variable funktioniert plötzlich nicht mehr?

Höy, ich mal wieder.
Ich hab mich ein ein neues Spiel getraut und mache jetzt sowas in der Richtung von Binding of Isaac. Dabei werden auch Monster mit Tränen abgeschossen. Dabei hab ich die Schüsse so gemacht:
Java:
if(Greenfoot.isKeyDown("left") && !tasteUnten){
            tear tear = new tear();
            getWorld().addObject(tear, getX(), getY());
            tear.setRotation(180);
            tasteUnten =true;
        }
        if(!Greenfoot.isKeyDown("left") && tasteUnten){
            tasteUnten = false;
        }

        if(Greenfoot.isKeyDown("right") && !tasteUnten2){
            tear tear = new tear();
            getWorld().addObject(tear, getX(), getY());
            tear.setRotation(0);
            tasteUnten2 =true;
        } 
        if(!Greenfoot.isKeyDown("right") && tasteUnten2){
            tasteUnten2 = false;
        }

        if(Greenfoot.isKeyDown("up") && !tasteUnten3){
            tear tear = new tear();
            getWorld().addObject(tear, getX(), getY());
            tear.setRotation(270);
            tasteUnten3 =true;
        } 
        if(!Greenfoot.isKeyDown("up") && tasteUnten3){
            tasteUnten3 = false;
        }

        if(Greenfoot.isKeyDown("down") && !tasteUnten4){
            tear tear = new tear();
            getWorld().addObject(tear, getX(), getY());
            tear.setRotation(90);
            tasteUnten4 =true;
        }
        if(!Greenfoot.isKeyDown("down") && tasteUnten4){
            tasteUnten4 = false;
        }
Das mit dem tasteUnten hab ich irgendwo so gefunden, ist damit nicht nur eine Taste funktioniert und die Tränen nicht direkt hintereinander kommen, aber ist in dem Fall unwichtig.
Wenn jetzt eine Träne mit einer z.B. Fliege kollidiert soll die Träne verschwinden (hab ich hier mit nem transparenten Bild gemacht, nicht mit removeObject), die Fliege verschwinden und auf die Variable flytreffer eins addiert werden (also flytreffer = flytreffer +1). Das hat auch funktioniert, doch ganz plötzlich funktioniert es nicht mehr. Die Fliegen verschwinden auch manchmal in Kontakt mit der Figur oder mit der Weltgrenze, was eig. nicht passieren dürfte. Mein Code für die Fliege wäre:
Java:
import greenfoot.*;  // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)

/**
 * Write a description of class fly here.
 * 
 * @author (your name) 
 * @version (a version number or a date)
 */
public class fly extends Mover
{
    /**
     * Act - do whatever the fly wants to do. This method is called whenever
     * the 'Act' or 'Run' button gets pressed in the environment.
     */
    public void act() 
    {
        if (anWeltRand())
        {
            drehe(17);
        }
        bewege();
        if (Greenfoot.getRandomNumber(100) > 90)
        {
            drehe(Greenfoot.getRandomNumber(90) - 45);
        }
        
    }  
    /**
     * Drehe den übergebenen Wert in Grad nach rechts.
     * Das p vor pGrad zeigt an, dass es ein Parameter (Übergabewert) ist.
     */
    public void drehe(int pGrad)
    {
        setRotation(getRotation() + pGrad);
    }
    

    /**
     * Bewegt Objekt in aktueller Richtung nach vorne.
     */
    public void bewege()
    {
        double grad = Math.toRadians( getRotation() );
        int x = (int) Math.round(getX() + Math.cos(grad) * 1);
        int y = (int) Math.round(getY() + Math.sin(grad) * 1);
        
        setLocation(x, y);
    }

    
    /**
     * Teste, ob sich das Objekt in der Nähe des Randes der Welt befindet.
     * Gebe true (wahr) zurück, falls dies der Fall ist, anderfalls false.
     */
    public boolean anWeltRand()
    {
        if(getX() < 20 || getX() > getWorld().getWidth() - 20)
            return true;
        if(getY() < 105 || getY() > getWorld().getHeight() - 20)
            return true;
        else
            return false;
    }
}

Code für die Tränen:
Java:
import greenfoot.*;  // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)

/**
 * Write a description of class tear here.
 * 
 * @author (your name) 
 * @version (a version number or a date)
 */
public class tear extends Mover
{
    /**
     * Act - do whatever the tear wants to do. This method is called whenever
     * the 'Act' or 'Run' button gets pressed in the environment.
     */
    public void act() 
    {

        fly fly = (fly) getOneIntersectingObject(fly.class);
        if(fly != null) {
            getWorld().removeObject(fly);
            flytreffer = flytreffer +1;
        }
        if(getX() <= 89 || getX() >= 711 || getY() <=192 || getY() >= 500){
            setImage("invisible.png");
        }
        else{
            move(05.00);
        }
    }
}

Und die Klasse Mover wurde so aus der Grenfoot-Datenbank übernommen, hab ich aus einem Video-Tut.
Wäre schön, wenn ihr einem Anfänger helfen könntet 😀
 
Als allererstes fällt auf, dass [c]flytreffer[/c] nirgendwo definiert zu sein scheint. Eigentlich sollte da sowas stehen:

Java:
public class tear extends Mover
{
   int flytreffer = 0;
   ...
}

Zum Rest kann ich nicht viel sagen, da ich Greenfoot nicht kenne. Vielleicht kannst du dir an den wichtigen Stellen (wie den act-Methoden) mal die Werte ausgeben, die dich interesserieren - falls das Ding irgend eine Art von Konsole hat.
 
Doch, flytreffer ist in Mover definiert, hatte ich vergessen zu erwähnen. Zu deinem letzten Satz... meinst du etwas, wo mir die Werte der Variablen etc. angezeigt werden? Da guck ich die ganze Zeit schon, flytreffer steigt nicht, obwohl die Fliegen getroffen werden und auch verschwinden (wobei sie wie gesagt auch manchmal einfach random verschwinden).
 
Naja, ohne die Methode
Code:
getOneIntersectingObject
wird es schwierig, etwas Konkretes zu sagen. Ist das eine GreenWasauchimmer-Klasse oder wo kommt die her?

Aber warum verwendest du eigentlich einmal
Code:
removeObject
und einmal
Code:
setImage("invisible")?
 
getOneIntersectingObject wird von Greenfoot kommen, wird zumindest nirgendwo genauer definiert, wird einfach benutzt.
Das setImage benutze ich, weils mit 2mal removeObject irgendwie nicht funktioniert hat, also würde jetzt die Träne unsichtbar werden (durch ein transparentes png ersetzt) und die Fliege entfernt werden.
 

Neue Themen


Zurück
Oben