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 命名约定(应该以小写开头)。
添加回答
举报