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

2014/6/2

Greenfoot terminal window's problem

ShowS7oppeR ShowS7oppeR

2014/6/2

#
Hi :) I've got a little problem with the game I've just made : My character (a crab) stays on a road and he has to avoid the cars. When a car hurts him the game stops (which is normal) but an error message comes : 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. at greenfoot.Actor.failIfNotInWorld(Actor.java:663) at greenfoot.Actor.getX(Actor.java:157) at Animal.atWorldEdge(Animal.java:59) at Crab2.dieAtWorldEdge(Crab2.java:45) at Crab2.act(Crab2.java:38) at greenfoot.core.Simulation.actActor(Simulation.java:568) at greenfoot.core.Simulation.runOneLoop(Simulation.java:526) at greenfoot.core.Simulation.runContent(Simulation.java:215) at greenfoot.core.Simulation.run(Simulation.java:205) Here is my crab's and car's code (there are 3 kinds of cars but the code is the same for every cars) : Crab :
import greenfoot.*;  // (World, Actor, GreenfootImage, and Greenfoot)

/**
 * This class defines a crab. Crabs live on the beach. They like sand worms 
 * (very yummy, especially the green ones).
 * 
 * Version: 4
 * 
 * The crab is keyboard controlled and eats worms. In this version, we have added
 * a sound when the crab eats a worm.
 */

public class Crab2 extends Animal
{
    /** 
     * Act - do whatever the crab wants to do. This method is called whenever
     *  the 'Act' or 'Run' button gets pressed in the environment.
     */
    private int carNumber;
    private GreenfootImage image1;
    private GreenfootImage image2;
    private int imageDelay;
    public Crab2()
    {
        image1 = new GreenfootImage("crab.png");
        image2 = new GreenfootImage("crab2.png");
        setImage(image1);
        carNumber = 0;
        imageDelay = 0;
    }
       
    public void act()
    {
        moveOnKeyPress();
        switchImage();
        touchCar();
        addCar();
        dieAtWorldEdge();
        switchWorld();
        imageDelay++;
    }
    
    public void dieAtWorldEdge()
    {
        if ( atWorldEdge() ) 
        {
            Greenfoot.playSound("au.wav");
            getWorld().removeObject(this);
            Greenfoot.stop();
        }
    }
    /**
     * Check whether a control key on the keyboard has been pressed.
     * If it has, react accordingly.
     */
    public void moveRight()  
    {  
    int x = (getX() + 6);  
    int y = (getY());  
      
    setLocation(x, y);  
    }  
    public void moveLeft()  
    {  
    int x = (getX() - 6);  
    int y = (getY());  
      
    setLocation(x, y);  
    }
    public void moveUp()  
    {  
    int x = (getX());  
    int y = (getY() - 6);  
      
    setLocation(x, y);  
    }
    public void moveDown()  
    {  
    int x = (getX());  
    int y = (getY() + 6);  
      
    setLocation(x, y);  
    } 
    public void moveOnKeyPress()  
    {  
    if(Greenfoot.isKeyDown("left")) {  
        moveLeft();  
    }  
    if(Greenfoot.isKeyDown("right")) {  
        moveRight();  
    }
    //if(Greenfoot.isKeyDown("up")) {
      //  moveUp();
    //}
    //if(Greenfoot.isKeyDown("down")) {
     //   moveDown();
    }
    
    public void switchImage()
    {
        if(imageDelay==4)
        {
        if (getImage() == image1)
        {
            setImage(image2);
        }
        else
        {
            setImage(image1);
        }
        imageDelay=0;   
        }
    }
    public void touchCar()
    {
        if ( canSee(Ambulance.class) ) 
        {
            Greenfoot.playSound("au.wav");
            getWorld().removeObject(this);
            Greenfoot.stop();
        }
         if ( canSee(Car01.class) ) 
        {
            Greenfoot.playSound("au.wav");
            getWorld().removeObject(this);
            Greenfoot.stop();
        }
         if ( canSee(Car02.class) ) 
        {
            Greenfoot.playSound("au.wav");
            getWorld().removeObject(this);
            Greenfoot.stop();
        }
         if ( canSee(Car03.class) ) 
        {
            Greenfoot.playSound("au.wav");
            getWorld().removeObject(this);
            Greenfoot.stop();
        }
    }
    public void addCar() {
        if(Greenfoot.getRandomNumber(200)<1 && carNumber < 10 ) {
          getWorld().addObject(new Ambulance(), Greenfoot.getRandomNumber(500)+30, 560);
          carNumber = carNumber +1;
        }
        if(Greenfoot.getRandomNumber(200)<5 && carNumber < 10 ) {
          getWorld().addObject(new Car01(), Greenfoot.getRandomNumber(500)+30, 560);
          carNumber = carNumber +1;
        }
        if(Greenfoot.getRandomNumber(200)<4 && carNumber < 10 ) {
          getWorld().addObject(new Car02(), Greenfoot.getRandomNumber(500)+30, 560);
          carNumber = carNumber +1;
        }
        if(Greenfoot.getRandomNumber(200)<4 && carNumber < 10 ) {
          getWorld().addObject(new Car03(), Greenfoot.getRandomNumber(500)+30, 560);
          carNumber = carNumber +1;
        }
        if(Greenfoot.getRandomNumber(200)>4 && carNumber == 10 ) {
          carNumber = carNumber -1;
        }
    }
    public void switchWorld()
    {
        if(canSee(Rocket.class))
        {
            Greenfoot.stop();
        }
    }
}
Cars :
import greenfoot.*;  // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)

/**
 * Write a description of class Car01 here.
 * 
 * @author (your name) 
 * @version (a version number or a date)
 */
public class Car01 extends Transport
{
    /**
     * Act - do whatever the Car01 wants to do. This method is called whenever
     * the 'Act' or 'Run' button gets pressed in the environment.
     */
   public void act() 
    {
           moveUp();
           atWorldEdge();
    }    
   public void moveUp()
    {
    int x = (getX());  
    int y = (getY() - 5);  
      
    setLocation(x, y);  
    }
   public void atWorldEdge()
    {
        if (getY() < 10)
        {
            getWorld().removeObject(this);
        }
    }
}
Thanks for helping me :)
davmac davmac

2014/6/2

#
This is just a variation of the exact same problem you were having earlier. My answer to that should help you here, too.
ShowS7oppeR ShowS7oppeR

2014/6/4

#
This worked here too, thank you :)
You need to login to post a reply.