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

2012/5/27

Health in Game - java.lang.IndexOutOfBoundsException: Index: 0, Size: 0

freddekl freddekl

2012/5/27

#
Hi everybody, in my game I am trying to have hearts to represent my health in the top right corner. If a zombie touches you, it makes the heart gray, I use 8 different hearts for classes and place them on the screen, the main actor moves along with these hearts through all the worlds and I used setImage() to make it gray, here is the code:
public class Heart1 extends Hearts
{
    /**
     * Act - do whatever the Heart wants to do. This method is called whenever
     * the 'Act' or 'Run' button gets pressed in the environment.
     */
    public void act() 
    {
        heart();
    }    

    public void heart()
    {
        ShotgunSprite shooter = (ShotgunSprite) getWorld().getObjects(ShotgunSprite.class).get(0);
        if (shooter.hp < 1)
        {
            setImage("grayheart.png");
        }
        if (shooter.hp >= 1)
        {
            setImage("heart.png");
        }
    }

}
whenever the actor moves to a new world I make the hearts reappear in the same places and of course they turn gray since the if (shooter.hp < 1) is true, it gets that from the main actor ShotgunSprite (or shooter), I have managed to do all of but here comes the error, whenever I set a new world, the game stops and gives the error below; If I press run again it works fine again with gray hearts and all, how can I get it to not do this? From what I can understand it has something to do with the getObjects part. java.lang.IndexOutOfBoundsException: Index: 0, Size: 0 at java.util.ArrayList.RangeCheck(ArrayList.java:547) at java.util.ArrayList.get(ArrayList.java:322) at Heart4.heart(Heart4.java:22) at Heart4.act(Heart4.java:17) at greenfoot.core.Simulation.actActor(Simulation.java:498) at greenfoot.core.Simulation.runOneLoop(Simulation.java:461) at greenfoot.core.Simulation.runContent(Simulation.java:197) at greenfoot.core.Simulation.run(Simulation.java:187)
danpost danpost

2012/5/27

#
I have a feeling that if you make adding the hearts into the world the last thing you do while constructing the world, you will not get the error. Since you already have what you have, insert at line 13 the following statement:
if (getWorld().getObjects(ShotgunSprite.class).isEmpty()) return;
freddekl freddekl

2012/5/27

#
Thanks for the fast reply! It worked!
You need to login to post a reply.