В настоящее время я использую созданный мной движок анимации, который берет объекты типа Drawable и добавляет их в список. Drawable - это интерфейс, который имеет один метод:
public void draw(Graphics2D g2d);
Расширяющийся менеджер анимации просматривает этот список и вызывает метод draw () для каждого объекта, передавая объект Graphics2D, полученный из компонента Swing.
Поначалу казалось, что этот метод работает хорошо, но, как я и опасался, он не может обрабатывать несколько объектов в долгосрочной перспективе.
Зарегистрированные всего два Drawables, оба рисуют изображения на экране, через 30-60 секунд начинают мигать.
Есть ли способ оптимизировать этот метод? В настоящее время он обращается к потоку AWT (invokeLater) для обработки всех задач. Параллельное рисование на самом деле не вариант, так как это почти всегда вызывает проблемы в Swing / AWT, в значительной степени из-за того, что Graphics не синхронизируется.
Если это просто плохой способ анимации, то какой метод лучше, когда у вас есть несколько объектов, для которых все вещи должны отображаться с их собственными конкретными переменными кашель игра кашель ?
Любая помощь будет принята с благодарностью. Спасибо!
EDIT:
Я не могу использовать repaint (), потому что мой движок уже вызывает поток AWT для рисования. Если я вызываю invokeLater из потока AWT, изображение по какой-то причине никогда не окрашивается.
Я должен также добавить, что я использую систему тиков и фпс. 60 тиков при 120 кадрах в секунду.
Каждый тик обновляет игровую логику, в то время как вызовы рендеринга каждого фрейма рисуют на менеджере фреймов.
Это плохая идея? Должен ли я просто использовать FPS, а не тики?