簡體   English   中英

調用他的方法后如何刪除對象?

[英]How can i remove object after calling his method?

我在做電腦游戲。 我需要的是:在對象炸彈發動攻擊后,我想將其從ArrayList<Entity>刪除。

Entity是所有敵人(例如炸彈,弓箭手)的抽象類。我使用ArrayList指示需要繪制和更新的內容。 如果有可能,我想刪除所有對象,而不僅僅是從ArrayList刪除。

這是我的GameEngine類的代碼:

    public class GameEngine {
      gameEntities = new ArrayList<Entity>();
      Bomb bomb1;

      bomb1 = new Bomb();
      gameEntities.add(bomb1)
      public void update() {   
        for(Entity entity : gameEntities){
            entity.whatNow();
        }        
      }
    }

和其他類:

    public class Bomb extends Entity { 
      void whatNow() {
        GameData.entityRemove(this);
      }
    }

    public class GameData {
      static void entityRemove(Entity entity) {
        for(Entity listEntity : GameEngine.gameEntities){
            if(entity == listEntity){
                 listEntity = null;
                 GameEngine.gameEntities.remove(listEntity);
            }
      }
    }

您所處環境中的Entity不應直接訪問GameEngine元素。 我寧願建議這樣的事情:

  • 您的引擎有兩個列表:一個用於current ,另一個用於future
  • 您的代碼只是遍歷current列表
  • 處理條目導致future事件時,應在主GameEngine對象上調用諸如addFuture(Entity whatever)類的方法
  • 當你洞處理current列表-那么你明確current移動的所有項目future進去
  • 然后您清除future並再次開始處理current

換句話說:避免刪除條目。 只需處理一次列表,將其丟棄並收集第二個列表中的“新”條目。

且無關:閱讀@Override批注並開始使用它。

您應該讓炸彈將自己標記為“ toClean”,並讓GameEnginewhatNow()更新后將其刪除(我假設您的GameEngine是單例):

public class Bomb extends Entity { 
  void whatNow() {
    // do my bomb stuff
    GameEngine.instance().remove(this);
  }
}

public class GameEngine {

  // Declare a gameEntitiesToRemove queue/list

  public void update() {
    for(Entity entity : gameEntities){
       entity.whatNow();
    }
    while(gameEntitiesToRemove.hasNext()){
       gameEntities.remove(gameEntitiesToRemove.pop());
    }
  }

  public void remove(Entity entity) {
    this.gameEntitiesToRemove.add(entity);
  }
}

問題出在for循環中的if子句中:

listEntity = null;
GameEngine.gameEntities.remove(listEntity);

如果第一行中的listEntity不設置為null,則第二行將從ArrayList中刪除listEntity。 現在,它嘗試從列表中刪除null,這可能不是您想要的。

至少要交換這兩行。 但是,將listEntity設置為null確實沒有意義,因為作為局部變量,無論如何它將在該循環之后消失。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM