2015-05-21 39 views
1

當我的敵人到達屏幕的底部時,我想移除,如果敵人被子彈擊中,我想刪除它。錯誤是:java.lang.IllegalStateException:演員不在世界。試圖在不在世界中的情況下使用演員的位置。它或者尚未插入,或者已被刪除。Greenfoot演員不在世界錯誤

我認爲這個問題是因爲有兩個調用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

的Greenfoot不允許與世界上的任何相互作用後的演員已經從它刪除代碼。如果您的Y座標導致this actor在第一條if語句中被從世界中移除,則之後調用getOneIntersectingObject是錯誤的。

有幾種方法來解決這個問題:你可以換隨後的線在else條款,你可以做一個return早期,如果你如果刪除自己在第一,或者你可以使用一個boolean標誌,以保持你是否跟蹤想要刪除自己,但只能將刪除作爲act()方法中最後一項。