This site requires JavaScript, please enable it in your browser!
Greenfoot back
Jip_maris
Jip_maris wrote ...

2022/4/19

how do ik make the timer work?

Jip_maris Jip_maris

2022/4/19

#
import greenfoot.*;  

public class Level2 extends World
{
    //(hoe lang duurt de timer voordat het level voorbij moet zijn, ongeveer 40 seconden)
    private int timer = 55*40;
    //(grootte van de wereld + objecten toevoegen)
    public Level2()
    {    
        super(3000, 700, 1, false);
        getBackground().setColor(new Color(9, 2, 47));
        getBackground().fill();
        addObject(new Wolken(), 1500, 350);
        addObject(new Wolk(), 1000, 400);
        addObject(new Staken(), 589, 700);
        addObject(new Staken(), 767, 700);
        addObject(new Staken(), 1015, 700);
        addObject(new Staken(), 2385, 700);
        addObject(new Staken(), 2633, 700);
        addObject(new Staken(), 2881, 700);
        addObject(new Staken(), 3104, 700);
        addObject(new Staken(), 3328, 700);
        addObject(new Staken(), 3552, 700);
        addObject(new Staken(), 3776, 700);
        addObject(new GrondLVL2(), -250, 120);
        addObject(new GrondLVL2(), 100, 666);
        addObject(new GrondLVL2(), 1495, 666);
        addObject(new GrondLVL2(), 1896, 666);
        addObject(new GrondLVL2(), 1900, 210);
        addObject(new GrondLVL2(), 797, 730); 
        addObject(new GrondLVL2(), 2595, 730);
        addObject(new GrondLVL2(), 2850, 730);
        addObject(new GrondLVL2(), 3250, 730);
        addObject(new GrondLVL2(), 3500, 730);
        addObject(new Klein(), 650, 535);
        addObject(new Klein(), 850, 490);
        addObject(new Klein(), 1050, 580);
        addObject(new Klein(), 1100, 370);
        addObject(new Klein(), 1350, 300);
        addObject(new Klein(), 2940, 185);
        addObject(new Klein(), 2980, 185);
        addObject(new Klein(), 3000, 185);
        addObject(new Klein(), 3100, 185);
        addObject(new Klein(), 3150, 185);
        addObject(new SuperKlein(), 2385, 185);
        addObject(new SuperKlein(), 2540, 185);
        addObject(new SuperKlein(), 2695, 185);
        addObject(new SlangLVL2(), 2095, 140);
        addObject(new KoningSlang(), 2985, 130);
        addObject(new Huis(), 3169, 122);
        addObject(new Speler(), 80, 40);
    }
    
    public Timer()
    {
        updateImage();
    }

    public void act()
    {
        //(hoe de timer werkt staat hieronder beschreven. Als er 0 of minder dan 0 seconden over zijn, ga je naar een nieuwe wereld(GameOverTijd))
        timer--;
        if (timer % 55 == 0) updateImage();
        if (timer <=0) Greenfoot.setWorld(new GameOverTijd());
    }
    
    private void updateImage()
    {
        setImage(new GreenfootImage("Tijd over:" + timer/55, 20, Color.BLACK, Color.RED));
    }
}
Jip_maris Jip_maris

2022/4/19

#
It gives a error at line 54, so i couldn't test if the rest does work.
Super_Hippo Super_Hippo

2022/4/19

#
Starting from line 54, all of that seems to belong into a class called Timer which extends Actor.
Jip_maris Jip_maris

2022/4/19

#
Oh wow, that makes a lot of sence, it works now. Thank you!!
Jip_maris Jip_maris

2022/4/19

#
Could you mabe help me make the image face the right way? Now it constantly faces the right side, but i don't really how to use mirrorImage. and how can i stop the actor from jumping without touching the solid ground? I'm pretty new at greenfoot btw
import greenfoot.*;

public class Speler extends Actor
{
    //(snelheid van het vallen, acceleratie bij het vallen en snelheid van het lopen)
    int vSpeed = 0;
    int accel = 0;
    int speed = 5;

    public void act()
    {
        springen();
        checkvallen();
        vallen();
        checkToetsen();
        schietKogel();
        volgendeWereld();
        StervenDoorStaken();
        StervenDoorSlang();
        StervenDoorKoningSlang();
        StervenDoorSlangLVL2();
        Gefeliciteerd();
    }

    public void schietKogel()
    {
        //(als de muis aangeklikt wordt, gaat er een kogel die richting uit)
        if(Greenfoot.mousePressed(null))
        {
            Kogel Kogel = new Kogel();
            getWorld().addObject(Kogel, getX(), getY());
            Kogel.turnTowards(Greenfoot.getMouseInfo().getX(), Greenfoot.getMouseInfo().getY());
            Greenfoot.playSound("Schot.wav");
        }
    }

    public void checkToetsen()
    {
        //(welke richting de speler uitgaat als er op een bepaalde knop wordt geklikt)
        if(Greenfoot.isKeyDown("d"))
        {
            setLocation(getX() + speed, getY());
        }
        if(Greenfoot.isKeyDown("a"))
        {
            setLocation(getX() - speed, getY());
        }
    }

    public void vallen()
    {
        //(hoe de speler valt, dus + valsnelheid)
        setLocation(getX(), getY() + vSpeed);
    }

    public void checkvallen()
    {
        //(als de speler niet op een grond staat, valt hij naar beneden met de valsnelheid en als de speler wel op de grond staat is er geen valsnelheid)
        if(!isTouching(Grond.class))
        {
            vSpeed++;
        }
        else if(isTouching(Grond.class))
        {
            setLocation(getX(), getY() -1);
            vSpeed = 0;
        }

    }

    public void springen()
    {
        //(springen is de negatieve valsnelheid, dus het tegenovergestelde ervan)
        if(Greenfoot.isKeyDown("w" ))
        {
            vSpeed = -10;
        }
    }

    public void volgendeWereld()
    {
        //(als de deur geraakt wordt, gaat de speler naar level 2)
        if (isTouching(Deur.class))
        {
            Greenfoot.setWorld(new Level2());
            Greenfoot.playSound("Deur.wav"); 
        }
    }

    public void StervenDoorStaken()
    {
        //(als de staken geraakt worden gaat de speler naar een game-over scherm)
        if (isTouching(Staken.class))
        {
            Greenfoot.setWorld(new GameOverStaken());
            Greenfoot.playSound("DoodStaken.wav");
        }
    }

    public void StervenDoorSlang()
    {
        //(als de slang geraakt wordt gaat de speler naar een game-over scherm)
        if (isTouching(Slang.class))
        {
            Greenfoot.setWorld(new GameOverSlang());
            Greenfoot.playSound("DoodSlang.wav"); 
        }
    }

    public void StervenDoorSlangLVL2()
    {
        //(als de slang geraakt wordt gaat de speler naar een game-over scherm)
        if (isTouching(SlangLVL2.class))
        {
            Greenfoot.setWorld(new GameOverSlang());
            Greenfoot.playSound("DoodSlang.wav"); 
        }
    }

    public void StervenDoorKoningSlang()
    {
        //(als de slang geraakt wordt gaat de speler naar een game-over scherm)
        if (isTouching(KoningSlang.class))
        {
            Greenfoot.setWorld(new GameOverKoningSlang());
            Greenfoot.playSound("DoodSlang.wav"); 
        }
    }

    public void Gefeliciteerd()
    {
        //(als de speler het huisje raakt, komt er een scherm in beeld dat je het spel hebt gehaald)
        if (isTouching(Huis.class))
        {
            Greenfoot.setWorld(new Gehaald());
            Greenfoot.playSound("Gewonnen.wav"); 
        }
    }
}
danpost danpost

2022/4/22

#
Save both the image and its mirrored version in fields and use them as necessary. Example:
private GreenfootImage imageRight, imageLeft;

protected void addedToWorld(World world)
{
    imageRight = getImage();
    imageLeft = new GreenfootImage(imageRight);
    imageLeft.mirrorHorizontally();
    setImage(imageRight);
}
Then set the image as needed to imageRight or imageLeft just like in the last line You can even check which image is currently being used like this:
if (direction < 0 && getImage() == imageRight)
{
    setImage(imageLeft);
g}
if (direction > 0 && getImage() == imageLeft)
{
    setImage(imageRight);
}
With the above, the image only changes when the direction of the actor changes and NOT set every act step. Also, the above should only be used AFTER determining the new direction value. The direction should be obtained by the following:
// field
private int direction = 0;

// in code
direction = 0;
if (Greenfoot.isKeyDown("a")) direction++;
if (Greenfoot.isKeyDown("d")) direction--;
move(direction*speed);
danpost danpost

2022/4/22

#
Jip_maris wrote...
how can i stop the actor from jumping without touching the solid ground?
First check if touching ground. Then only jump if touching ground. The order that I prefer to do things is: (1) fall (move vertically regardless of objects); (2) collision check (is it touching anything it should not or, possibly, is it at the bottom of the window); Note: if vertical speed is positive (in downward direction) and a collision with platform or ground occurs, then the on-ground state is true. (*) upon collision, adjust vertical position of actor so that the two actors do not take up the same space; (3) allow jump if on ground. You will find an example in myJump and Run w/Moving Platform scenario.
You need to login to post a reply.