3 回答

TA貢獻1847條經驗 獲得超7個贊
你有一個清單DeadFlowers,但你從來沒有add()什么東西。
因此你的循環
for(GameObject obj : DeadFlowers) {
((SpawnFlowers)obj).removeFlowers();
DeadFlowers.remove(obj);
}
永遠不會跑。
你可以例如做
public void grow() {
age+=1;
if(age == 300) {
delegate = new DeadFlower(gc, x, y);
DeadFlowers.add(delegate);
}
delegate.update();
}
我不確定你想用這種方法實現什么。如果這只是重新繪制的代碼,您可能想要刪除條件。
public void removeFlowers() {
if (age == 400) {
delegate.update();
}
}

TA貢獻1772條經驗 獲得超8個贊
最喜歡的是,您的實際問題在這里:
for(GameObject obj : DeadFlowers) {
((SpawnFlowers)obj).removeFlowers();
DeadFlowers.remove(obj);
}
當花 300 歲時,您將花變成了 DeadFlower。我假設您還將新的 DeadFlower 對象添加到您的死花列表中。在下一個游戲循環中,上面的代碼調用 checks: is the age 400, if so ... do nothing。接下來,您的代碼將從死花列表中刪除該死花對象!
換句話說:當花朵達到 300 時,您將其變成一朵死花。之后,您從死花列表中刪除那朵死花。因此,該列表將始終立即清空。
長話短說:你的整個邏輯都搞砸了。您必須退后一步并清楚地概述(首先為自己)您擁有哪些存儲桶,以及您希望如何處理它們。如:
if (age == 400) {
delegate.update();
}
此代碼對 400 案例沒有任何特定的作用。將其與 300 案例進行比較。在那里你至少創建了一個新對象。有什么變化。但是在 400 的情況下,你會更新。那應該怎么辦?!
除此之外:您似乎在該類的構造函數中隱式地將死花添加到該列表中。超級壞主意。保存死花列表的類應該是唯一將新花添加到該列表或刪除的地方。我假設您的 DeadFlowers 類知道該列表,并將新實例添加到該列表中。那是大錯特錯。
還有一件小事:ArrayList<GameObject>DeadFlowers = new ArrayList<GameObject>();最好是List<GameObject> deadFlowers = new ArrayList<>();. 左邊不需要表示具體類型(ArrayList),右邊也不需要使用泛型。當然,這DeadFlowers違反了 java 命名約定(應該以小寫開頭)。
添加回答
舉報