Hi! I'm trying to create an idle animation based on if the Hero class is facing a certain direction, and not moving. However, when idling, it would flicker between idle left and idle right.
I can't seem to identify the problem so any help would be appreciated!
Here's the code:
Sorry for the messy set up.
Thanks again!
import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)
/**
* Write a description of class Hero here.
*
* @author (your name)
* @version (a version number or a date)
*/
public class Hero extends Actor
{
int health=5,lives=3;
private final int GRAVITY = 1;
private int velocity;
public boolean lookingLeft;
public boolean lookingRight;
private int imageCounter;
int span = 4;
int imageTimer=0;
int imageIdleTimer=0;
int imageIdleTwoTimer=0;
GreenfootImage runningOne = new GreenfootImage("running1.png");
GreenfootImage runningTwo = new GreenfootImage("running2.png");
GreenfootImage runningThree = new GreenfootImage("running3.png");
GreenfootImage runningOneR = new GreenfootImage("running1r.png");
GreenfootImage runningTwoR = new GreenfootImage("running2r.png");
GreenfootImage runningThreeR = new GreenfootImage("running3r.png");
/**
* Act - do whatever the Hero wants to do. This method is called whenever
* the 'Act' or 'Run' button gets pressed in the environment.
*/
public Hero(){
//setting Images
//idle1
GreenfootImage idleOneRight = new GreenfootImage("Idle1.png");
GreenfootImage idleOneLeft = new GreenfootImage("Idle1.png");
idleOneRight.mirrorHorizontally();
//idle2
GreenfootImage idleTwoRight = new GreenfootImage("Idle2.png");
GreenfootImage idleTwoLeft = new GreenfootImage("Idle2.png");
idleTwoRight.mirrorHorizontally();
//shoot1
GreenfootImage shootOneRight = new GreenfootImage("shoot1.png");
GreenfootImage shootOneLeft = new GreenfootImage("shoot1.png");
shootOneRight.mirrorHorizontally();
//shoot2
GreenfootImage shootTwoRight = new GreenfootImage("shoot2.png");
GreenfootImage shootTwoLeft = new GreenfootImage("shoot2.png");
shootTwoRight.mirrorHorizontally();
//setting velocity
velocity = 0;
//setting Hero image
setImage(idleOneLeft);
getImage().scale(getImage().getWidth() + 75, getImage().getHeight() + 75);
lookingLeft=true;
}
public void act()
{
fall();
move();
}
public void move(){
if(Greenfoot.isKeyDown("left")){
lookingLeft = true;
setLocation(getX()-4,getY());
//while(Greenfoot.isKeyDown("left")){leftWalk();}
leftWalk();
}
if(Greenfoot.isKeyDown("right")){
lookingRight = true;
setLocation(getX()+4,getY());
rightWalk();
}
if(Greenfoot.isKeyDown("left")==false&&Greenfoot.isKeyDown("up")==false&&Greenfoot.isKeyDown("right")==false&&checkOnFloor()==true&&lookingLeft==true){
idleLeft();
}
if(Greenfoot.isKeyDown("left")==false&&Greenfoot.isKeyDown("up")==false&&Greenfoot.isKeyDown("right")==false&&checkOnFloor()==true&&lookingRight==true){
idleRight();
}
}
public boolean canMove(){
boolean check;
double spaceX = Math.floor(getImage().getHeight()/2)+1;
double maxX = Math.floor(getWorld().getWidth())-spaceX;
double minX = 0+spaceX;
int x = getX();
int y = getY();
if(x>minX){
check=true;
}
else{check=false;}
if(x<maxX){
check=true;
}
else{check=false;}
return check;
}
public void fall(){
setLocation(getX(),getY()+velocity);
if(checkOnFloor()==true){
velocity=0;
while(checkOnFloor()==true){
setLocation(getX(),getY()-1);
}
setLocation(getX(),getY()+1);
}
else{velocity+=GRAVITY;}
}
public void jump(){
velocity = -15;
}
public boolean checkOnFloor(){
boolean floorcheck;
if(getY()>getWorld().getHeight()-55){
floorcheck=true;
}
else{floorcheck=false;}
return floorcheck;
}
public void leftWalk(){
imageTimer++;
if(imageTimer==span){setImage(runningOne);getImage().scale(75,106);}
if(imageTimer==span*2){setImage(runningTwo);getImage().scale(75,97);}
if(imageTimer==span*3){setImage(runningThree); getImage().scale(75,106);imageTimer=0;}
}
public void rightWalk(){
imageTimer++;
if(imageTimer==span){setImage(runningOneR);getImage().scale(75,106);}
if(imageTimer==span*2){setImage(runningTwoR);getImage().scale(75,97);}
if(imageTimer==span*3){setImage(runningThreeR); getImage().scale(75,106);imageTimer=0;}
}
public void idleLeft(){
GreenfootImage idleOneRight = new GreenfootImage("Idle1.png");
GreenfootImage idleOneLeft = new GreenfootImage("Idle1.png");
idleOneRight.mirrorHorizontally();
//idle2
GreenfootImage idleTwoRight = new GreenfootImage("Idle2.png");
GreenfootImage idleTwoLeft = new GreenfootImage("Idle2.png");
idleTwoRight.mirrorHorizontally();
imageIdleTimer++;
if(imageIdleTimer==span){setImage(idleOneLeft);getImage().scale(92,106);}
if(imageIdleTimer==span*3){setImage(idleTwoLeft);getImage().scale(92,106);imageIdleTimer=0;}
}
public void idleRight(){
GreenfootImage idleOneRight = new GreenfootImage("Idle1.png");
idleOneRight.mirrorHorizontally();
//idle2
GreenfootImage idleTwoRight = new GreenfootImage("Idle2.png");
idleTwoRight.mirrorHorizontally();
imageIdleTwoTimer++;
if(imageIdleTwoTimer==span){setImage(idleOneRight);getImage().scale(92,106);}
if(imageIdleTwoTimer==span*5){setImage(idleTwoRight);getImage().scale(92,106);imageIdleTwoTimer=0;}
}
}
