Greenfoot Actor 不在世界错误中

Greenfoot Actor not in World error

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

我认为问题是因为有两次调用 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);
    }    
}

Greenfoot 不允许在 actor 被移除后与世界进行任何交互。如果您的 Y 坐标导致 this actor 在第一个 if 语句中从世界中移除,则之后调用 getOneIntersectingObject 是错误的。

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