Нужен вражеский менеджер, чтобы ждать между появлением врагов

У меня есть пара разных типов врагов и классы arrayList врагаManager для каждого типа. У меня каждый тип врага случайным образом появляется в точках возрождения, немного за пределами экрана, выходит на экран, затем с другой стороны, умирает и случайным образом реагирует. Проблема в том, что когда я использую цикл для создания объектов, многие из них появляются в одном месте или догоняют друг друга, умирают примерно в одно и то же время и снова появляются. Я бы хотел, чтобы между ними была задержка, чтобы они были более разбросаны.

Я ищу способ замедлить зацикливание врагов в java. Я попытался расширить классы вражеских менеджеров по таймеру и назвал запуск функции спауна, но это не сработало.

Кроме того, я не использую многопоточность, потому что я еще не знаю, как это настроить, и пытался завершить этот проект, не реализовав его, но если это кажется лучшим решением, я думаю, мне придется.

спасибо за любые предложения.

обновлено .....

class spawnLgCars extends TimerTask {
    public void run() {
        if (lgCars.size() < 10) {
            lgCars.add(new LgCar());
            System.out.println("spawned");
        } else if (lgCars.size() > 10) {
            lgCars.get(0);
        }
    }

}

Здесь я хотел бы реализовать TimerTask, но поскольку он должен был находиться в собственном классе, у него не было доступа к свойствам экземпляра lgCars, который я использовал. Затем я попытался добавить расширение lgCars с помощью Timer Task и вызвать задачу в конструкторе, но это тоже не сработало. не знаю почему.


person Dakota Hipp    schedule 08.10.2014    source источник
comment
но это не сработало. На самом деле, мне очень трудно понять, что вызывает ваши текущие проблемы. Предоставьте более подробную справочную информацию, подробности и соответствующий код. Какую библиотеку графического интерфейса вы используете? Если Swing, то используйте таймер Swing для задержки. Если нет, то, возможно, это java.util.Timer или запланированная служба исполнителя. И да, вероятно, вам пора прочитать о многопоточности.   -  person Hovercraft Full Of Eels    schedule 09.10.2014
comment
Я попробовал Thread.sleep, но это не сработало, это приостанавливало всю мою программу, а не только нерест в диспетчере врагов. Я использую качели и awt. большую часть того, что я добавил, я нашел в различных руководствах. Я впервые создаю графический интерфейс на java. Пользуюсь таймером качелей, чтобы все перекрашивать. Я не уверен, смогу ли я использовать еще один для создания врагов? Я опубликую ниже, как я пытался реализовать TimerTask, и объясню, что он делал и почему не работал. Спасибо вам обоим.   -  person Dakota Hipp    schedule 09.10.2014


Ответы (1)


TimerTask и java.util.Timer не будут работать, потому что они не настроены для запуска повторяющегося кода в потоке событий Swing, и их следует избегать с помощью графического интерфейса пользователя Swing. Опять же, вам следует использовать таймер Swing, поскольку весь код, который вызывается в ActionListener таймера, вызывается в потоке событий Swing.

С другой стороны, если у вас есть длительная задача, например, если вы хотите выполнить анализ изображения или что-то еще, выполнение чего требует много времени, то ее следует вызывать в фоновом потоке, например, через SwingWorker.

person Hovercraft Full Of Eels    schedule 09.10.2014