Frage von DerErdmann, 42

Programmierung in Greenfoot -> feste Blöcke - kann mir jemand helfen?

Wir sind zur zeit dabei ein kleines Spiel zu programmieren in Greenfoot. Unser Problem ist, dass unsere Spielfigur durch die Blöcke fällt. Wie beheben wir dieses Problem am besten? Hier der Code für die Spielfigur:

public class Spielfigur extends Actor { private double speed = 0; private int ySpeed; private int apexTimer;

public void act() 
{
     
    int groundLevel = getWorld().getHeight() - getImage().getHeight()/2;
    boolean onGround = (getY() == groundLevel);
    if (!onGround)
    {
        if (ySpeed == 0 && apexTimer > 0) apexTimer--; 
        if (ySpeed == 0 && apexTimer > 0) return; 
        ySpeed++; 
        setLocation(getX(), getY()+ySpeed); 
        if (getY()>=groundLevel) 
        {
            setLocation(getX(), groundLevel); 
            Greenfoot.getKey(); 
       }
    }
    else 
    {
        if ("space".equals(Greenfoot.getKey())) 
        {
            ySpeed = 15; 
            setLocation(getX(), getY()+ySpeed); 
            apexTimer = 15;  
        }
    }

    if(Greenfoot.isKeyDown("d")&& getOneObjectAtOffset(-30,0, Block.class)==null)
    {
        setLocation(getX() +15, getY());
        Greenfoot.delay(0);
    }
    
    if(Greenfoot.isKeyDown("a")&& getOneObjectAtOffset(30,0, Block.class)==null)
    {
        setLocation(getX() -15, getY());
        Greenfoot.delay(0);
    }
    
     if(Greenfoot.isKeyDown(" ")&& getOneObjectAtOffset(0,-30, Block.class)==null)
    {
        setLocation(getX() , getY() -30);
        Greenfoot.delay(0);
    }       
}    
}

Schonmal danke für eine Antwort!:)

Antwort
von Tschoo, 18

Hallo!

Den Code habe ich mir nicht angeschaut.

Aber gegen das durchfallen müsst ihr halt drauf achten, dass die Spielfigur "erkennt", wenn sie die Oberseite eines Blocks berührt und darf dann nicht weiterfallen.

In einer Klasse alleine ist das nocht lösbar (meiner Meinung nach).

Für ähnlich Probleme habe ich als Ansatz ,it Interfaces gearbeitet und hat nach einigem Rumprobieren  gut funktioniert.

Gruß

Keine passende Antwort gefunden?

Fragen Sie die Community