1

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

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

1 回答 1

1

Greenfoot 不允许在演员从世界中移除后与世界进行任何互动。如果你的 Y 坐标导致thisactor在第一个 if 语句中从世界中移除,那么之后调用是错误的getOneIntersectingObject

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

于 2015-05-21T11:09:47.193 回答