Если вы периодически вызываете функцию с таймером, ваша проблема заключается в том, что вы запрашиваете системное время много раз, а не один раз, поэтому значение, которое вы тестируете в трех частях, меняется.
Было бы лучше создать очередь элементов для рисования с заданным временем обновления, поскольку ваш код будет становиться все более и более сложным, если вы просто будете использовать множество операторов if
вместо абстракций OO.
Когда экран раскрашен, найдите время один раз и передайте его всем элементам, которые нужно нарисовать.Таким образом, все элементы будут синхронизированы друг с другом, и у вас не будет проблем с тем, что время на первом if
отличается от времени на третьем if
.
Так что яBomberMan должен реализовать интерфейс с методом draw ( Graphics2D g, long time )
, который реализуют все анимированные элементы, и иметь методы get и set вместо открытого поля isImmune.Методы get и set изменяют значение массива изображений для спрайта, поэтому коду не нужно знать ни о каком другом состоянии, в котором находится бомбардировщик.