I just realized my solution has an IndexOutOfBoundsError (<= 17), Dans solution also works.
/** Running Right Images */
private final GreenfootImage[] runningRightAnimation =
{
new GreenfootImage("Puupy_RR1.png"),
new GreenfootImage("Puupy_RR2.png"),
new GreenfootImage("Puupy_RR3.png"),
new GreenfootImage("Puupy_RR4.png"),
new GreenfootImage("Puupy_RR5.png"),
new GreenfootImage("Puupy_RR6.png"),
new GreenfootImage("Puupy_RR7.png"),
new GreenfootImage("Puupy_RR8.png"),
new GreenfootImage("Puupy_RR9.png"),
new GreenfootImage("Puupy_RR10.png"),
new GreenfootImage("Puupy_RR11.png"),
new GreenfootImage("Puupy_RR12.png"),
new GreenfootImage("Puupy_RR13.png"),
new GreenfootImage("Puupy_RR14.png"),
new GreenfootImage("Puupy_RR15.png"),
new GreenfootImage("Puupy_RR16.png"),
new GreenfootImage("Puupy_RR17.png"),
new GreenfootImage("Puupy_RR18.png")
};
/** Running Left Images */
private final GreenfootImage[] runningLeftAnimation =
{
new GreenfootImage("Puupy_RL1.png"),
new GreenfootImage("Puupy_RL2.png"),
new GreenfootImage("Puupy_RL3.png"),
new GreenfootImage("Puupy_RL4.png"),
new GreenfootImage("Puupy_RL5.png"),
new GreenfootImage("Puupy_RL6.png"),
new GreenfootImage("Puupy_RL7.png"),
new GreenfootImage("Puupy_RL8.png"),
new GreenfootImage("Puupy_RL9.png"),
new GreenfootImage("Puupy_RL10.png"),
new GreenfootImage("Puupy_RL11.png"),
new GreenfootImage("Puupy_RL12.png"),
new GreenfootImage("Puupy_RL13.png"),
new GreenfootImage("Puupy_RL14.png"),
new GreenfootImage("Puupy_RL15.png"),
new GreenfootImage("Puupy_RL16.png"),
new GreenfootImage("Puupy_RL17.png"),
new GreenfootImage("Puupy_RL18.png")
};
/** Jumping Right Images */
private final GreenfootImage[] jumpingRightAnimation =
{
new GreenfootImage("Puppy_JumpRight1.png"),
new GreenfootImage("Puppy_JumpRight2.png")
};
/** Jumping Left Images */
private finalGreenfootImage[] jumpingLeftAnimation =
{
new GreenfootImage("Puppy_JumpLeft1.png"),
new GreenfootImage("Puppy_JumpLeft2.png")
};
/** Idlie Right Images */
private final GreenfootImage[] idleRightAnimation =
{
new GreenfootImage("Puupy_Inactive_Right1.png"),
new GreenfootImage("Puupy_Inactive_Right2.png"),
new GreenfootImage("Puupy_Inactive_Right3.png"),
new GreenfootImage("Puupy_Inactive_Right4.png"),
new GreenfootImage("Puupy_Inactive_Right5.png"),
new GreenfootImage("Puupy_Inactive_Right6.png"),
new GreenfootImage("Puupy_Inactive_Right7.png"),
new GreenfootImage("Puupy_Inactive_Right8.png"),
new GreenfootImage("Puupy_Inactive_Right9.png"),
new GreenfootImage("Puupy_Inactive_Right10.png"),
new GreenfootImage("Puupy_Inactive_Right11.png")
};
/** Idle Left Images */
private final GreenfootImage[] idleLeftAnimation =
{
new GreenfootImage("Puupy_Inactive_Left1.png"),
new GreenfootImage("Puupy_Inactive_Left2.png"),
new GreenfootImage("Puupy_Inactive_Left3.png"),
new GreenfootImage("Puupy_Inactive_Left4.png"),
new GreenfootImage("Puupy_Inactive_Left5.png"),
new GreenfootImage("Puupy_Inactive_Left6.png"),
new GreenfootImage("Puupy_Inactive_Left7.png"),
new GreenfootImage("Puupy_Inactive_Left8.png"),
new GreenfootImage("Puupy_Inactive_Left9.png"),
new GreenfootImage("Puupy_Inactive_Left10.png"),
new GreenfootImage("Puupy_Inactive_Left10.png")
};
/** Current Animation */
private GreenfootImage[] currentAnimation = idleRightAnimation;
/** Running Right Images */
private final GreenfootImage[] runningRightAnimation =
{
new GreenfootImage("Puupy_RR1.png"),
new GreenfootImage("Puupy_RR2.png"),
new GreenfootImage("Puupy_RR3.png"),
new GreenfootImage("Puupy_RR4.png"),
new GreenfootImage("Puupy_RR5.png"),
new GreenfootImage("Puupy_RR6.png"),
new GreenfootImage("Puupy_RR7.png"),
new GreenfootImage("Puupy_RR8.png"),
new GreenfootImage("Puupy_RR9.png"),
new GreenfootImage("Puupy_RR10.png"),
new GreenfootImage("Puupy_RR11.png"),
new GreenfootImage("Puupy_RR12.png"),
new GreenfootImage("Puupy_RR13.png"),
new GreenfootImage("Puupy_RR14.png"),
new GreenfootImage("Puupy_RR15.png"),
new GreenfootImage("Puupy_RR16.png"),
new GreenfootImage("Puupy_RR17.png"),
new GreenfootImage("Puupy_RR18.png")
};
/** Running Left Images */
private final GreenfootImage[] runningLeftAnimation =
{
new GreenfootImage("Puupy_RL1.png"),
new GreenfootImage("Puupy_RL2.png"),
new GreenfootImage("Puupy_RL3.png"),
new GreenfootImage("Puupy_RL4.png"),
new GreenfootImage("Puupy_RL5.png"),
new GreenfootImage("Puupy_RL6.png"),
new GreenfootImage("Puupy_RL7.png"),
new GreenfootImage("Puupy_RL8.png"),
new GreenfootImage("Puupy_RL9.png"),
new GreenfootImage("Puupy_RL10.png"),
new GreenfootImage("Puupy_RL11.png"),
new GreenfootImage("Puupy_RL12.png"),
new GreenfootImage("Puupy_RL13.png"),
new GreenfootImage("Puupy_RL14.png"),
new GreenfootImage("Puupy_RL15.png"),
new GreenfootImage("Puupy_RL16.png"),
new GreenfootImage("Puupy_RL17.png"),
new GreenfootImage("Puupy_RL18.png")
};
/** Jumping Right Images */
private final GreenfootImage[] jumpingRightAnimation =
{
new GreenfootImage("Puppy_JumpRight1.png"),
new GreenfootImage("Puppy_JumpRight2.png")
};
/** Jumping Left Images */
private finalGreenfootImage[] jumpingLeftAnimation =
{
new GreenfootImage("Puppy_JumpLeft1.png"),
new GreenfootImage("Puppy_JumpLeft2.png")
};
/** Idlie Right Images */
private final GreenfootImage[] idleRightAnimation =
{
new GreenfootImage("Puupy_Inactive_Right1.png"),
new GreenfootImage("Puupy_Inactive_Right2.png"),
new GreenfootImage("Puupy_Inactive_Right3.png"),
new GreenfootImage("Puupy_Inactive_Right4.png"),
new GreenfootImage("Puupy_Inactive_Right5.png"),
new GreenfootImage("Puupy_Inactive_Right6.png"),
new GreenfootImage("Puupy_Inactive_Right7.png"),
new GreenfootImage("Puupy_Inactive_Right8.png"),
new GreenfootImage("Puupy_Inactive_Right9.png"),
new GreenfootImage("Puupy_Inactive_Right10.png"),
new GreenfootImage("Puupy_Inactive_Right11.png")
};
/** Idle Left Images */
private final GreenfootImage[] idleLeftAnimation =
{
new GreenfootImage("Puupy_Inactive_Left1.png"),
new GreenfootImage("Puupy_Inactive_Left2.png"),
new GreenfootImage("Puupy_Inactive_Left3.png"),
new GreenfootImage("Puupy_Inactive_Left4.png"),
new GreenfootImage("Puupy_Inactive_Left5.png"),
new GreenfootImage("Puupy_Inactive_Left6.png"),
new GreenfootImage("Puupy_Inactive_Left7.png"),
new GreenfootImage("Puupy_Inactive_Left8.png"),
new GreenfootImage("Puupy_Inactive_Left9.png"),
new GreenfootImage("Puupy_Inactive_Left10.png"),
new GreenfootImage("Puupy_Inactive_Left10.png")
};
/** Current Animation */
private GreenfootImage[] currentAnimation = idleRightAnimation;
if (leftIdleAnimation != currentAnimation && rightIdleAnimation != currentAnimation)
{
if (runningRightAnimation == currentAnimation || jumpRightAnimation == currentAnimation)
currentAnimation = idleRightAnimation;
else
currentAnimation = idleLeftAnimation;
frame = 1;
}// save animation state
GreenfootImage[] inAnimation = currentAnimation;
int atFrame = frame;
// horizontal movement
int dx = 0, dy = 0;
if (Greenfoot.isKeyDown("left")) dx--;
if (Greenfoot.isKeyDown("right")) dx++;
if (dx == 0) // idle
{
// code you questioned goes here (use 'frame = 0')
}
else if (dx == 1 && currentAnimation != runningRightAnimation) // right
{
currentAnimation = runningRightAnimation;
frame = 0;
}
else if (dx == -1 && currentAnimation != runningLeftAnimation) // left
{
currentAnimation = runningLeftAnimation;
frame = 0;
}
/** vertical movement code here */
// run animation
setImage(currentAnimation[frame);
frame = (frame+1)%currentAnimation.length;public class Puppy_Player extends Actor
{
private int vSpeed = 5;
private int acceleration = 2;
private int jumpStrenght = 10;
public boolean jumping;
private int speed = 4;
private boolean onGrounds;
public void checkFall()
{
if(onGround())
{
vSpeed = 0;
}
else
{
fall();
}
}
public boolean onGround()
{
Actor under = getOneObjectAtOffset(0,getImage().getHeight() /2 ,Grounds.class);
return under != null;
}
public void fall()
{
setLocation(getX(), getY() + vSpeed);
vSpeed = vSpeed + acceleration;
}
public void jump()
{
vSpeed = -jumpStrenght;
fall();
}
}public void checkKey()
{
if(Greenfoot.isKeyDown("right"))
{
moveRight();
}
if(Greenfoot.isKeyDown("left"))
{
moveLeft();
}
if(Greenfoot.isKeyDown("up"))
{
jump();
}
}if (onGround() && Greenfoot.isKeyDown("up"))if (onGround() && Greenfoot.isKeyDown("up"))public void setScrollingBackground(GreenfootImage scrollingBackground)
{
if(mainActor==null)
{
System.out.println("setMainActor Puppy_Player");
System.out.println("");
return;
}
background = new GreenfootImage(scrollingBackground);
background.scale(scrollingWidth*getCellSize(), scrollingHeight*getCellSize());
scrollBackground();
}
public void fillScrollingBackground(GreenfootImage fillImage)
{
if(mainActor==null)
{
System.out.println("setMainActor Puppy_Player");
System.out.println("");
return;
}
if (fillImage.getWidth()<getWidth() && fillImage.getHeight()<getHeight())
{
setBackground(new GreenfootImage(fillImage));
fillImage = getBackground();
}
background = new GreenfootImage(scrollingWidth*getCellSize(), scrollingHeight*getCellSize());
for (int x=0; x<background.getWidth(); x+=fillImage.getWidth())
for (int y=0; y<background.getHeight(); y+=fillImage.getHeight())
background.drawImage(fillImage, x, y);
scrollBackground();
}setMainActor(new Puppy_Player(), 250, 300); // the int parameters are centered window x and y ranges