I'm trying to change the actor's image while jumping when the moving images are facing the left side (fr0m, fr1m...fr6m, m stands for mirror)
line 108
import greenfoot.*;
public class Mario extends Actor
{
private int speed = 6;
private int vSpeed = 0;
private int acceleration = 2;
private int jumpStrength = 25;
public int armour = 3;
private int frame = 0;
private int attFrame = 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");
private GreenfootImage att_fr0m = new GreenfootImage("Mario_att_fr0m.png");
private GreenfootImage att_fr1m = new GreenfootImage("Mario_att_fr1m.png");
private GreenfootImage att_fr2m = new GreenfootImage("Mario_att_fr2m.png");
private GreenfootImage att_fr0 = new GreenfootImage("Mario_att_fr0.png");
private GreenfootImage att_fr1 = new GreenfootImage("Mario_att_fr1.png");
private GreenfootImage att_fr2 = new GreenfootImage("Mario_att_fr2.png");
public void act()
{
if (! getWorld().getObjects(GameOver.class).isEmpty())
{
return;
}
checkKeys();
attack();
checkFall();
hitGoomba();
hitCastle_l1();
hitCastle_l2();
checkArmour();
animationCounter ++;
jumpAnimation();
}
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 jumpAnimation()
{
if ((getImage().equals(fr0m) ||
getImage().equals(fr1m) ||
getImage().equals(fr2m) ||
getImage().equals(fr3m) ||
getImage().equals(fr4m) ||
getImage().equals(fr5m) ||
getImage().equals(fr6m)) &&
Greenfoot.isKeyDown("up")
)
{
setImage(fr2m);
}
}
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(Greenfoot.isKeyDown("space"))
{
if (animationCounter % 4 == 0)
{
animateAttack();
}
}
}
public void animateAttack()
{
if(attFrame == 0)
{
setImage(att_fr0);
}
else if(attFrame == 1)
{
setImage(att_fr1);
getWorld().addObject(new Sphere_right(), getX() + 6, getY()-50);
}
else if(attFrame == 2)
{
setImage(att_fr2);
attFrame = 0;
return;
}
attFrame++;
}
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);
}
}
}
