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

2017/2/4

Jumping Problem

Hondrok Hondrok

2017/2/4

#
Whenever I want to jump the actor blocks at some height above the ground ~ 10 pixels.
import greenfoot.*;
   
public class Mario extends Actor
{
    private int speed = 5;
    private int vSpeed = 0;
    private int acceleration = 2;
    private int jumpStrength = 25;
    public int armour = 3;
    
    private int frame = 0;
    private int animationCounter = 0;
    private GreenfootImage fr0 = new GreenfootImage("Mario_fr0.png");
    private GreenfootImage fr1 = new GreenfootImage("Mario_fr1.png");
    private GreenfootImage fr2 = new GreenfootImage("Mario_fr2.png");
    private GreenfootImage fr3 = new GreenfootImage("Mario_fr3.png");
    private GreenfootImage fr4 = new GreenfootImage("Mario_fr4.png");
    private GreenfootImage fr5 = new GreenfootImage("Mario_fr5.png");
    private GreenfootImage fr6 = new GreenfootImage("Mario_fr6.png");
    
    private GreenfootImage fr0m = new GreenfootImage("Mario_fr0m.png");
    private GreenfootImage fr1m = new GreenfootImage("Mario_fr1m.png");
    private GreenfootImage fr2m = new GreenfootImage("Mario_fr2m.png");
    private GreenfootImage fr3m = new GreenfootImage("Mario_fr3m.png");
    private GreenfootImage fr4m = new GreenfootImage("Mario_fr4m.png");
    private GreenfootImage fr5m = new GreenfootImage("Mario_fr5m.png");
    private GreenfootImage fr6m = new GreenfootImage("Mario_fr6m.png");
     
    public void act() 
    {
       if (! getWorld().getObjects(GameOver.class).isEmpty()) 
       {
           return;
       }      
       checkKeys();
       attack();
       checkFall();
       hitGoomba();
       hitCastle_l1();
       hitCastle_l2();
       checkArmour();
       animationCounter ++;
    }
    
    private void checkKeys()  
    {
       if(Greenfoot.isKeyDown("left"))
       {
           moveLeft();
       } 
       if(Greenfoot.isKeyDown("right"))
       {
           moveRight();
       }
       if(Greenfoot.isKeyDown("up"))
       {
           jump();
       }
    }    
 
    public void checkFall()
    {
        if(onGround() && vSpeed != -jumpStrength)
        {
           vSpeed=0; 
        }
        else
        {
            setImage("Mario_fr0.png");
            fall();
        }
    }
     
    public boolean onGround()
    {
        Actor under = getOneObjectAtOffset ( 0, getImage().getHeight()/2, Ground.class);
        return under != null;
    }
     
    public void fall()
    {
        setLocation ( getX(), getY() + vSpeed);
        vSpeed = vSpeed + acceleration;
    }   
         
    public void jump()
    {
       if (onGround())
       {
           vSpeed = - jumpStrength;
       }
    }
     
    public void moveRight()
    {
        setLocation ( getX() + speed, getY());
        if(animationCounter % 4 == 0)
        {
            animateRight();
        }
    }
    
    public void animateRight()
    {
        if(frame == 0)
        {
            setImage(fr0);
        }
        else if(frame == 1) 
        {
            setImage(fr1);
        }
        else if(frame == 2) 
        {
            setImage(fr2);
        }
        else if(frame == 3) 
        {
            setImage(fr3);
        }
        else if(frame == 4) 
        {
            setImage(fr4);
        }
        else if(frame == 5) 
        {
            setImage(fr5);
        }
        else if(frame == 6) 
        {
            setImage(fr6);
            frame = 1;
            return;
        }
        
        frame++;
    }
     
    public void moveLeft()
    {
        setLocation ( getX() - speed, getY());
        
        if(animationCounter % 4 == 0)
        {
            animateLeft();
        }
    }
    
    public void animateLeft()
    {
        if(frame == 0)
        {
            setImage(fr0m);
        }
        else if(frame == 1) 
        {
            setImage(fr1m);
        }
        else if(frame == 2) 
        {
            setImage(fr2m);
        }
        else if(frame == 3) 
        {
            setImage(fr3m);
        }
        else if(frame == 4) 
        {
            setImage(fr4m);
        }
        else if(frame == 5) 
        {
            setImage(fr5m);
        }
        else if(frame == 6) 
        {
            setImage(fr6m);
            frame = 1;
            return;
        }
        
        frame++;
    }
    
    public void attack()
    {
        if("space".equals(Greenfoot.getKey()))
        {
            getWorld().addObject(new Sphere_right(), getX() + 5, getY());
        }
    }

    public void checkArmour()
    {
        Actor sphere = getOneIntersectingObject(Sphere_left.class);
        if(sphere != null)
        {
           armour = armour - 1;
           ((Health_Bar) getWorld().getObjects(Health_Bar.class).get(0)).updateImage(armour);
           getWorld().removeObject(sphere);
        }
        
        if(armour == 0)
        {
            getImage().setTransparency(0);
            World world = new Game_Over_Lose();
            Greenfoot.setWorld(world);
        }
    }
    
    public void hitGoomba()
    {
        Actor goomba = getOneIntersectingObject(Goomba.class);
        if(goomba != null)
        {
            armour = armour - 1;
            getWorld().removeObject(goomba);
            ((Health_Bar) getWorld().getObjects(Health_Bar.class).get(0)).updateImage(armour);
        }
    }
     
    public void hitCastle_l1()
    {
        Actor castle = getOneIntersectingObject(Castle.class);
        if(castle != null)
        {
            World world = new Level_2();
            Mario mario2 = (Mario)world.getObjects(Mario.class).get(0);
            mario2.armour = this.armour;
            Greenfoot.setWorld(world);
            ((Health_Bar)world.getObjects(Health_Bar.class).get(0)).updateImage(armour);
        }
    }
    
    public void hitCastle_l2()
    {
        Actor castle = getOneIntersectingObject(Castle_l2.class);
        if(castle != null)
        {
            World world = new Final_level();
            Mario mario3 = (Mario)world.getObjects(Mario.class).get(0);
            mario3.armour = this.armour; 
            Greenfoot.setWorld(world);
            ((Health_Bar)world.getObjects(Health_Bar.class).get(0)).updateImage(armour);
        }
    }
}
Hondrok Hondrok

2017/2/5

#
Hondrok wrote...
Whenever I want to jump the actor blocks at some height above the ground ~ 10 pixels.
import greenfoot.*;
   
public class Mario extends Actor
{
    private int speed = 5;
    private int vSpeed = 0;
    private int acceleration = 2;
    private int jumpStrength = 25;
    public int armour = 3;
    
    private int frame = 0;
    private int animationCounter = 0;
    private GreenfootImage fr0 = new GreenfootImage("Mario_fr0.png");
    private GreenfootImage fr1 = new GreenfootImage("Mario_fr1.png");
    private GreenfootImage fr2 = new GreenfootImage("Mario_fr2.png");
    private GreenfootImage fr3 = new GreenfootImage("Mario_fr3.png");
    private GreenfootImage fr4 = new GreenfootImage("Mario_fr4.png");
    private GreenfootImage fr5 = new GreenfootImage("Mario_fr5.png");
    private GreenfootImage fr6 = new GreenfootImage("Mario_fr6.png");
    
    private GreenfootImage fr0m = new GreenfootImage("Mario_fr0m.png");
    private GreenfootImage fr1m = new GreenfootImage("Mario_fr1m.png");
    private GreenfootImage fr2m = new GreenfootImage("Mario_fr2m.png");
    private GreenfootImage fr3m = new GreenfootImage("Mario_fr3m.png");
    private GreenfootImage fr4m = new GreenfootImage("Mario_fr4m.png");
    private GreenfootImage fr5m = new GreenfootImage("Mario_fr5m.png");
    private GreenfootImage fr6m = new GreenfootImage("Mario_fr6m.png");
     
    public void act() 
    {
       if (! getWorld().getObjects(GameOver.class).isEmpty()) 
       {
           return;
       }      
       checkKeys();
       attack();
       checkFall();
       hitGoomba();
       hitCastle_l1();
       hitCastle_l2();
       checkArmour();
       animationCounter ++;
    }
    
    private void checkKeys()  
    {
       if(Greenfoot.isKeyDown("left"))
       {
           moveLeft();
       } 
       if(Greenfoot.isKeyDown("right"))
       {
           moveRight();
       }
       if(Greenfoot.isKeyDown("up"))
       {
           jump();
       }
    }    
 
    public void checkFall()
    {
        if(onGround() && vSpeed != -jumpStrength)
        {
           vSpeed=0; 
        }
        else
        {
            setImage("Mario_fr0.png");
            fall();
        }
    }
     
    public boolean onGround()
    {
        Actor under = getOneObjectAtOffset ( 0, getImage().getHeight()/2, Ground.class);
        return under != null;
    }
     
    public void fall()
    {
        setLocation ( getX(), getY() + vSpeed);
        vSpeed = vSpeed + acceleration;
    }   
         
    public void jump()
    {
       if (onGround())
       {
           vSpeed = - jumpStrength;
       }
    }
     
    public void moveRight()
    {
        setLocation ( getX() + speed, getY());
        if(animationCounter % 4 == 0)
        {
            animateRight();
        }
    }
    
    public void animateRight()
    {
        if(frame == 0)
        {
            setImage(fr0);
        }
        else if(frame == 1) 
        {
            setImage(fr1);
        }
        else if(frame == 2) 
        {
            setImage(fr2);
        }
        else if(frame == 3) 
        {
            setImage(fr3);
        }
        else if(frame == 4) 
        {
            setImage(fr4);
        }
        else if(frame == 5) 
        {
            setImage(fr5);
        }
        else if(frame == 6) 
        {
            setImage(fr6);
            frame = 1;
            return;
        }
        
        frame++;
    }
     
    public void moveLeft()
    {
        setLocation ( getX() - speed, getY());
        
        if(animationCounter % 4 == 0)
        {
            animateLeft();
        }
    }
    
    public void animateLeft()
    {
        if(frame == 0)
        {
            setImage(fr0m);
        }
        else if(frame == 1) 
        {
            setImage(fr1m);
        }
        else if(frame == 2) 
        {
            setImage(fr2m);
        }
        else if(frame == 3) 
        {
            setImage(fr3m);
        }
        else if(frame == 4) 
        {
            setImage(fr4m);
        }
        else if(frame == 5) 
        {
            setImage(fr5m);
        }
        else if(frame == 6) 
        {
            setImage(fr6m);
            frame = 1;
            return;
        }
        
        frame++;
    }
    
    public void attack()
    {
        if("space".equals(Greenfoot.getKey()))
        {
            getWorld().addObject(new Sphere_right(), getX() + 5, getY());
        }
    }

    public void checkArmour()
    {
        Actor sphere = getOneIntersectingObject(Sphere_left.class);
        if(sphere != null)
        {
           armour = armour - 1;
           ((Health_Bar) getWorld().getObjects(Health_Bar.class).get(0)).updateImage(armour);
           getWorld().removeObject(sphere);
        }
        
        if(armour == 0)
        {
            getImage().setTransparency(0);
            World world = new Game_Over_Lose();
            Greenfoot.setWorld(world);
        }
    }
    
    public void hitGoomba()
    {
        Actor goomba = getOneIntersectingObject(Goomba.class);
        if(goomba != null)
        {
            armour = armour - 1;
            getWorld().removeObject(goomba);
            ((Health_Bar) getWorld().getObjects(Health_Bar.class).get(0)).updateImage(armour);
        }
    }
     
    public void hitCastle_l1()
    {
        Actor castle = getOneIntersectingObject(Castle.class);
        if(castle != null)
        {
            World world = new Level_2();
            Mario mario2 = (Mario)world.getObjects(Mario.class).get(0);
            mario2.armour = this.armour;
            Greenfoot.setWorld(world);
            ((Health_Bar)world.getObjects(Health_Bar.class).get(0)).updateImage(armour);
        }
    }
    
    public void hitCastle_l2()
    {
        Actor castle = getOneIntersectingObject(Castle_l2.class);
        if(castle != null)
        {
            World world = new Final_level();
            Mario mario3 = (Mario)world.getObjects(Mario.class).get(0);
            mario3.armour = this.armour; 
            Greenfoot.setWorld(world);
            ((Health_Bar)world.getObjects(Health_Bar.class).get(0)).updateImage(armour);
        }
    }
}
nvm I got it
You need to login to post a reply.