当我的敌人到达屏幕的底部时,我想要移除,如果敌人被子弹击中,我想将其移除。错误是: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);
}
}
答案 0 :(得分:1)
在玩家被移除后,Greenfoot不允许与世界进行任何互动。如果您的Y坐标导致this
actor在第一个if语句中被移除,那么之后调用getOneIntersectingObject
会出错。
有几种方法可以解决这个问题:您可以将后续行包装在else
子句中,如果您在第一个中移除自己,可以提前return
,或者您可以使用boolean
标记来跟踪您是否要自行删除,但只将删除作为act()
方法中的最后一项。