Greenfoot演员不在世界错误

时间:2015-05-21 05:09:51

标签: object actor greenfoot

当我的敌人到达屏幕的底部时,我想要移除,如果敌人被子弹击中,我想将其移除。错误是:java.lang.IllegalStateException:Actor不在world中。尝试使用演员的位置,而不是在世界上。它尚未插入,或已被删除。

我认为问题是因为有两次调用removeObject或getOneIntersectingObject方法导致错误。我该如何解决这个问题?

这是导致错误的代码

public class Enemy extends Actor
{
    public void act() 
    {
        setLocation(getX(), getY() + 3);
        if (getY() > getWorld().getHeight() + 30 )
            getWorld().removeObject(this);
        Actor fire = getOneIntersectingObject(Fire.class);
        if(fire != null) 
            getWorld().removeObject(this);
    }    
}

1 个答案:

答案 0 :(得分:1)

在玩家被移除后,Greenfoot不允许与世界进行任何互动。如果您的Y坐标导致this actor在第一个if语句中被移除,那么之后调用getOneIntersectingObject会出错。

有几种方法可以解决这个问题:您可以将后续行包装在else子句中,如果您在第一个中移除自己,可以提前return,或者您可以使用boolean标记来跟踪您是否要自行删除,但只将删除作为act()方法中的最后一项。