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:713)
at greenfoot.Actor.getX(Actor.java:165)
at Mover.move(Mover.java:59)
at Projectile.act(Projectile.java:71)
at greenfoot.core.Simulation.actActor(Simulation.java:567)
at greenfoot.core.Simulation.runOneLoop(Simulation.java:530)
at greenfoot.core.Simulation.runContent(Simulation.java:193)
at greenfoot.core.Simulation.run(Simulation.java:183)
This is the error code that comes up when I shoot at my enemy... But the tricky thing is, that it doesnt happen always. Like sometimes the error comes up and sometimes all works fine. Maybe its just a little thing, that I have to change.
Projectile.class :
Enemy.class :
public class Projectile extends Mover
{
/**
* Act - do whatever the Projectile wants to do. This method is called whenever
* the 'Act' or 'Run' button gets pressed in the environment.
*/
private int speed = 10;
private int vSpeed = 0;
private int accel = 1;
private int jumpHeight= -20;
private boolean jumping = false;
int deathCount = 0;
boolean isDying = false;
private GreenfootImage run1 = new GreenfootImage("fireball1.png");
private GreenfootImage run2 = new GreenfootImage("fireball2.png");
private GreenfootImage run3 = new GreenfootImage("fireball3.png");
private GreenfootImage run4 = new GreenfootImage("fireball4.png");
private GreenfootImage run5 = new GreenfootImage("fireball5.png");
private GreenfootImage run6 = new GreenfootImage("fireball6.png");
private GreenfootImage run7 = new GreenfootImage("fireball7.png");
private GreenfootImage run8 = new GreenfootImage("fireball8.png");
private GreenfootImage run9 = new GreenfootImage("fireball9.png");
private GreenfootImage run10 = new GreenfootImage("Fireball_explosion1.png");
private GreenfootImage run11 = new GreenfootImage("Fireball_explosion2.png");
private GreenfootImage run12 = new GreenfootImage("Fireball_explosion3.png");
private GreenfootImage run13 = new GreenfootImage("Fireball_explosion4.png");
private GreenfootImage run14 = new GreenfootImage("Fireball_explosion5.png");
private GreenfootImage run15 = new GreenfootImage("Fireball_explosion6.png");
private GreenfootImage run16 = new GreenfootImage("Fireball_explosion7.png");
private GreenfootSound sound = new GreenfootSound("Projectile_sound.mp3");
private int frame = 1;
private int animationCounter = 0;
public Projectile()
{
}
public void act()
{
if(isDying)
{
deathCount++;
if(1 == deathCount)
setImage("Fireball_explosion1.png");
else if(2 == deathCount)
setImage("Fireball_explosion2.png");
else if(3 == deathCount)
setImage("Fireball_explosion3.png");
else if(4 == deathCount)
setImage("Fireball_explosion4.png");
else if(5 == deathCount)
setImage("Fireball_explosion5.png");
else if(6 == deathCount)
setImage("Fireball_explosion6.png");
else if(7 == deathCount)
setImage("Fireball_explosion7.png");
else
getWorld().removeObject(this);
return;
}
if (isTouching(Enemy.class))
getWorld().removeObject(this);
move(10.0);
moveAround();
animationCounter ++;
remove();
}
public void moveAround()
{
if(animationCounter % 8 == 0)
animatefireball();
}
public void turnToMouse()
{
turnTowards(15000,0);
}
public void animatefireball()
{
if (frame == 1)
{
setImage(run1);
}
else if(frame ==2)
{
setImage(run2);
}
else if(frame ==3)
{
setImage(run3);
}
else if(frame ==4)
{
setImage(run4);
}
else if(frame ==5)
{
setImage(run5);
}
else if(frame ==6)
{
setImage(run6);
}
else if(frame ==7)
{
setImage(run7);
}
else if(frame ==8)
{
setImage(run8);
}
else if(frame ==9)
{
setImage(run9);
frame = 1;
return;
}
frame ++;
}
public void remove()
{
Actor walls = getOneIntersectingObject(Ground.class);
if(getX() <=1 || getX() >= getWorld().getWidth() -1)
{
getWorld().removeObject(this);
return;
}
else if(walls != null)
{
deathCount = 0;
isDying = true;
sound.play();
}
Actor Enemy1 = getOneIntersectingObject(Enemy.class);
if(Enemy1 != null)
{
deathCount = 0;
isDying = true;
sound.play();
}
}
}
public class Enemy3 extends Enemy
{
private int speed = 4;
private int direction = 1;
private int frame = 3;
private int animationCounter = 0;
private int count = 0;
private int stunTimer;
private int health = 9999;
private int Delay;
boolean hitByProjectile = false;
private GreenfootImage attack1 = new GreenfootImage("genga1left_s.png");
private GreenfootImage attack2 = new GreenfootImage("genga2left_s.png");
private GreenfootImage attack3 = new GreenfootImage("genga3left_s.png");
private GreenfootImage attack4 = new GreenfootImage("genga4left_s.png");
private GreenfootImage attack1_1 = new GreenfootImage("genga1right_s.png");
private GreenfootImage attack2_1 = new GreenfootImage("genga2right_s.png");
private GreenfootImage attack3_1 = new GreenfootImage("genga3right_s.png");
private GreenfootImage attack4_1 = new GreenfootImage("genga4right_s.png");
private GreenfootImage run1 = new GreenfootImage("genga1left.png");
private GreenfootImage run2 = new GreenfootImage("genga2left.png");
private GreenfootImage run3 = new GreenfootImage("genga3left.png");
private GreenfootImage run4 = new GreenfootImage("genga4left.png");
private GreenfootImage run5 = new GreenfootImage("genga5left.png");
private GreenfootImage run6 = new GreenfootImage("genga6left.png");
private GreenfootImage run7 = new GreenfootImage("genga7left.png");
private GreenfootImage run8 = new GreenfootImage("genga8left.png");
private GreenfootImage run11 = new GreenfootImage("genga1right.png");
private GreenfootImage run21 = new GreenfootImage("genga2right.png");
private GreenfootImage run31 = new GreenfootImage("genga3right.png");
private GreenfootImage run41 = new GreenfootImage("genga4right.png");
private GreenfootImage run51 = new GreenfootImage("genga5right.png");
private GreenfootImage run61 = new GreenfootImage("genga6right.png");
private GreenfootImage run71 = new GreenfootImage("genga7right.png");
private GreenfootImage run81 = new GreenfootImage("genga8right.png");
/**
* Act - do whatever the Enemy3 wants to do. This method is called whenever
* the 'Act' or 'Run' button gets pressed in the environment.
*/
public void act()
{
if (stunTimer > 0) stunTimer--;
else move();
animationCounter++;
if (Delay > 0)Delay--;
if(isTouching(Projectile.class)&& !hitByProjectile && Delay == 0 )
{
health--;
stunTimer = 200;
Delay = 400;
hitByProjectile = true;
if (direction == -1)
setImage("done.png");
if (direction == 1)
setImage("done2.png");
}
else if(!isTouching(Projectile.class))
{
hitByProjectile = false;
}
if(health <=0)
{
getWorld().removeObject(this);
}
}
public void animateattack_l()
{
if (frame == 1)
{
setImage(attack1);
}
else if(frame ==2)
{
setImage(attack2);
}
else if(frame ==3)
{
setImage(attack3);
}
else if(frame ==4)
{
setImage(attack4);
}
else if(frame ==5)
{
setImage(attack3);
}
else if(frame ==6)
{
setImage(attack2);
}
else if(frame ==7)
{
setImage(attack1);
frame = 1;
return;
}
frame ++;
}
public void animateattack_r()
{
if (frame == 1)
{
setImage(attack1_1);
}
else if(frame ==2)
{
setImage(attack2_1);
}
else if(frame ==3)
{
setImage(attack3_1);
}
else if(frame ==4)
{
setImage(attack4_1);
}
else if(frame ==5)
{
setImage(attack3_1);
}
else if(frame ==6)
{
setImage(attack2_1);
}
else if(frame ==7)
{
setImage(attack1_1);
frame = 1;
return;
}
frame ++;
}
public void animatemove_l()
{
if (frame == 1)
{
setImage(run1);
}
else if(frame ==2)
{
setImage(run2);
}
else if(frame ==3)
{
setImage(run3);
}
else if(frame ==4)
{
setImage(run4);
}
else if(frame ==5)
{
setImage(run5);
}
else if(frame ==6)
{
setImage(run6);
}
else if(frame ==7)
{
setImage(run7);
}
else if(frame ==8)
{
setImage(run8);
frame = 1;
return;
}
frame ++;
}
public void animatemove_r()
{
if (frame == 1)
{
setImage(run11);
}
else if(frame ==2)
{
setImage(run21);
}
else if(frame ==3)
{
setImage(run31);
}
else if(frame ==4)
{
setImage(run41);
}
else if(frame ==5)
{
setImage(run51);
}
else if(frame ==6)
{
setImage(run61);
}
else if(frame ==7)
{
setImage(run71);
}
else if(frame ==8)
{
setImage(run81);
frame = 1;
return;
}
frame ++;
}
public void chasePlayer()
{
turnTowards(Player.playerX, 765);
move(direction);
setRotation(0);
}
public void move()
{
setLocation(getX() + speed * direction,getY());
count = (count+1)%490;
if (count == 0)
{
direction = -direction;
}
else if(isTouching(shorter.class))
{
direction = -direction;
}
if(isTouching(Player.class) && direction == -1)
{
if(animationCounter % 6 == 0)
animateattack_l();
}
else if(direction == -1)
{
if(animationCounter % 6 == 0)
animatemove_l();
}
else if(isTouching(Player.class) && direction == 1)
{
if(animationCounter % 6 == 0)
animateattack_r();
}
else if(direction == 1)
{
if(animationCounter % 6 == 0)
animatemove_r();
}
}
}