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

2013/12/10

give a object a number depening on where it spawns

Jtlie Jtlie

2013/12/10

#
I'm letting object spawn randomly at 8 different positions and I want to give them a number depending on where they spawn. This is my code:
 public  void vuller()
   {
        int random = 0;
        for(int r7 = 0; r7 <2; r7++)
        {   
             for (int k7 = 0;  k7 < 4; k7++)
             {
                 random = Greenfoot.getRandomNumber(10);
                 if (random < 2)
                 {
                        Krat krat = new Krat();
                        addObject(krat, k7 + 2, r7 + 1);
                        
                 }
             }
        }          
   }
   public void remover()
   {
       removeObjects(getObjectsAt(7,6,Krat.class));
       return;
   }
public class Krat extends Beurten
{
    boolean position = false;
    int nummer = 0;
    int Xplaats = getX();
    int Yplaats = getY();
    public void act() 
    {       
        bepaalnummer();
        while(beurt == nummer)
        {
            if(getX() != 3 && getY() !=4 && position == false)
            {
                turnTowards(3, 4);
                move(1);
            }
            else if( getX() == 3 && getY() == 4 || getY() !=6)
            {
                turnTowards(3, 6);
                move(1);
                position = true;
            } 
            else if(getX() == 7 && getY() == 6)
            {
                beurt++;
                if (beurt == 9)
                {
                    beurt = 1;
                    ((Practicum)getWorld()).vuller();
                }
                ((Practicum)getWorld()).remover();
            }
            else 
            {
               
               turnTowards(7,6);
               move(1);
            }
            
        }
    } 
    public void bepaalnummer()
    {

        if (Yplaats == 1)
        {
            switch(Xplaats)
            {
                case 2: nummer = 1; break;
                case 3: nummer = 2; break;
                case 4: nummer = 3; break;
                case 5: nummer = 4; break;
            }
        }
        else if (Yplaats == 2)
        {
            switch(Xplaats)
            {
                case 2: nummer = 5; break;
                case 3: nummer = 6; break;
                case 4: nummer = 7; break;
                case 5: nummer = 8; break;
            }
        }
    }
    public void bepaalleeg()
    {
        switch(nummer)
        {
                case 1: 
                if(getWorld().getObjectsAt(2, 1, Krat.class).isEmpty())
                {
                    beurt++;
                }; break;
                case 2:
                if(getWorld().getObjectsAt(3, 1, Krat.class).isEmpty())
                {
                    beurt++;
                }; break;
                case 3:
                if(getWorld().getObjectsAt(4, 1, Krat.class).isEmpty())
                {
                    beurt++;
                }; break;
                case 4:
                if(getWorld().getObjectsAt(5, 1, Krat.class).isEmpty())
                {
                    beurt++;
                }; break;
                case 5:
                if(getWorld().getObjectsAt(2, 2, Krat.class).isEmpty())
                {
                    beurt++;
                }; break;
                case 6:
                if(getWorld().getObjectsAt(3, 2, Krat.class).isEmpty())
                {
                    beurt++;
                }; break;
                case 7:
                if(getWorld().getObjectsAt(4, 2, Krat.class).isEmpty())
                {
                    beurt++;
                }; break;
                case 8:
                if(getWorld().getObjectsAt(5, 2, Krat.class).isEmpty())
                {
                    beurt++;
                }; break;
        }
    }
}   
Int beurt is declared in a higher class. When the object gets to a certain position, I want it to be removed, beurt to be increased, and the object that has the number that is equal to beurt to follow the same steps. But for now I get "java.lang.IllegalStateException: Actor not in world. An attempt was made to use the actor's location while it is not in the world. Either it has not yet been inserted, or it has been removed."
danpost danpost

2013/12/10

#
In the Krat class, add an instance field to hold that number you wish to give it
private int value;
Change the constructor to accept its new value:
public Krat(int val)
In the constructor, save the value:
value = val;
If you wish access to the value to outside classes, give the field a 'get' method:
public int getValue()
{
    return value;
}
In your 'vuller' method above, you can then change line 11 to:
Krat krat = new Krat(r7*4+k7);
That will give each one a unique number depending on where they spawn.
You need to login to post a reply.