3 回答

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

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

TA貢獻(xiàn)1824條經(jīng)驗(yàn) 獲得超8個(gè)贊
如果我沒(méi)記錯(cuò)的話,在你的花死了之后,你的年齡似乎并沒(méi)有改變 那么為什么要到 400 歲呢?
添加回答
舉報(bào)