Hi everyone :)
Im trying to code the animation for the movement of the hero in my game.
The movement itself was working flawlessly and wasn't hard to do, but I'm having difficulties with the animation.
I already looked into some discussions here, and learned a few things and could improve my code, but it still isnt working properly.
Ok, I have 7 pictures that represent the standing and moving of my hero in the right direction.
That's the movement method:
And thats the Animation method:
I've got two problems:
the first one is that sometimes, I get an java.lang.ArrayIndexOutOfBoundsException- Error, but I can't pinpoint what triggers that.
the second one is, that the image is being mirrowed uncontrolled, that's probably because I somehow wrongy implemented the part with the boolean facingLeft, but I'm not sure whats wrong.
I would be thankful for any help.
Greetings
Jimmy
GreenfootImage sr = new GreenfootImage("sr.png"); GreenfootImage wr1 = new GreenfootImage("wr1.png"); GreenfootImage wr2 = new GreenfootImage("wr2.png"); GreenfootImage wr3 = new GreenfootImage("wr3.png"); GreenfootImage wr4 = new GreenfootImage("wr4.png"); GreenfootImage wr5 = new GreenfootImage("wr5.png"); GreenfootImage wr6 = new GreenfootImage("wr6.png"); GreenfootImage[] images = {wr1, wr2, wr3, wr4, wr5, wr6};
public void movement() // Hero's movement { if(Greenfoot.isKeyDown("up")) // up { setLocation(getX(),getY()- mspeed/2); moveIndex++; } if(Greenfoot.isKeyDown("down")) // down { setLocation(getX(),getY()+ mspeed/2); moveIndex++; } if(Greenfoot.isKeyDown("left")) // left { setLocation(getX()- mspeed,getY()); moveIndex++; facingLeft = true; } if(Greenfoot.isKeyDown("right")) // right { setLocation(getX()+ mspeed,getY()); moveIndex++; facingLeft = false; } if(!Greenfoot.isKeyDown("right") && !Greenfoot.isKeyDown("left") && !Greenfoot.isKeyDown("up") && !Greenfoot.isKeyDown("down")) { moveIndex = -1; } moveAnimation(); }
public void moveAnimation() { if (moveIndex == 60) moveIndex=0; if (moveIndex % 10==0) { setImage(images[moveIndex/10]); } if (moveIndex== -1) { setImage(sr); } if (facingLeft) { getImage().mirrorHorizontally(); } }