Скорее всего, ваша настоящая проблема здесь:
for(GameObject obj : DeadFlowers) {
((SpawnFlowers)obj).removeFlowers();
DeadFlowers.remove(obj);
}
Вы превратили свои цветы в DeadFlower, когда ему 300 лет. Я предполагаю , что вы также добавили этот новый объект DeadFlowerк вашему списку мертвых цветов.В следующем игровом цикле приведенный выше код вызывает проверки: - это возраст 400, если так ... ничего не делать .Затем ваш код удалит этот мертвый цветок из списка мертвых цветов!
Другими словами: когда цветок достигает 300, вы превращаете его в мертвый цветок.Сразу после этого вы удаляете этот мертвый цветок из списка мертвых цветов.Таким образом, этот список всегда будет немедленно очищен.
Короче говоря: вся ваша логика совершенно испорчена.Вы должны сделать шаг назад и четко обозначить (для себя в первую очередь), какие у вас есть корзины и как вы хотите их обработать.Как в:
if (age == 400) {
delegate.update();
}
Этот код не делает ничего специфичным для этого случая 400.Сравните это с делом 300.Там вы создаете как минимум новый объект.Что-то меняется.Но в случае 400, ну, вы обновляете.Что это должно делать?!
Помимо этого: кажется, что вы неявно добавляете свои мертвые цветы в этот список в конструкторе этого класса.Супер плохая идея.Класс, который содержит , этот список мертвых цветов должен быть только местом, где новые цветы добавляются или удаляются в этот список.Я предполагаю, что ваш класс DeadFlowers знает этот список и добавляет новые экземпляры в этот список.Это мертвых неправильно.
И еще одна второстепенная вещь: ArrayList<GameObject>DeadFlowers = new ArrayList<GameObject>();
должно быть лучше List<GameObject> deadFlowers = new ArrayList<>();
.Нет необходимости выражать конкретный тип (ArrayList) с левой стороны, нет необходимости использовать универсальный тип с правой стороны.И, конечно же, DeadFlowers
нарушает соглашения об именах Java (должен начинаться со строчной буквы).