Ошибка актера Greenfoot не в мире

Когда мой враг доберется до нижней части экрана, я хочу удалить его, и если враг будет поражен пулями, я хочу удалить его. Ошибка: 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);
    }    
}

person blembo    schedule 21.05.2015    source источник


Ответы (1)


Greenfoot не допускает никаких взаимодействий с миром после того, как актер был удален из него. Если ваша координата Y приводит к удалению this актера из мира в первом операторе if, последующий вызов getOneIntersectingObject является ошибкой.

Есть несколько способов решить эту проблему: вы можете заключить следующие строки в предложение else, вы можете сделать раннее return, если вы удалите себя в первом if, или вы можете использовать флаг boolean, чтобы отслеживать, хотите ли вы удалить себя. , но выполняйте удаление только как самый последний элемент в методе act().

person Neil Brown    schedule 21.05.2015