[英]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”,並讓GameEngine
在whatNow()
更新后將其刪除(我假設您的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.