2012-02-29 2 views
3

Я занимаюсь игрой, включая физику и графический движок. Прямо сейчас мой графический движок настроен на 60 кадров в секунду, а иногда я вижу медленные обновления на экране. У меня есть JFrame, который я добавляю JPanel, который перемещается, что означает, что графический движок делает frame.repaint() каждый цикл. Я начинаю верить, что эта перекраска на кадре делает небольшую задержку на экране.JFrame vs JPanel

Задержка такова, что JPanel перемещается по прямой линии, и внезапно она может перепрыгнуть немного дальше обычного.

Лучше ли вы поместить «игровой экран» JPanel на JFrame, а затем добавить игрока «JPanel» в игровой экран и перекрасить игровой экран? Или это в основном то же самое, что перекрасить JFrame? Я только слышал, что JFrame должен быть тяжелым компонентом.

Я пробовал устанавливать более высокий fps, который ничего не меняет.

+1

Вы просматривали запись в буфер, а затем записывали это на экран? –

+0

Не могли бы вы поучаствовать в этом примере? :) Я не в том, чтобы размахивать –

+2

Пожалуйста, отредактируйте свой вопрос, чтобы включить [sscce] (http://sscce.org/), который показывает проблему, которую вы описываете. ['AnimationTest'] (http://stackoverflow.com/a/3256941/230513) может быть полезной отправной точкой. – trashgod

ответ

3

Посмотрите на эту страницу here, это много чтения, но должно содержать большую часть того, что вам нужно.

EDIT: Эта страница here немного лаконичнее

Этот стек переполнения после here сделки с двойной буферизацией.

Лучший совет, который я могу вам дать, это найти копию «Игрового программирования убийц в Java». Вы можете легко избавиться от старых версий книг бесплатно. Многие вещи немного устарели, но первые несколько глав, которые касаются создания игрового цикла и записи в буфер, по-прежнему очень важны и помогут вам в долгосрочной перспективе!

+0

Привет, друг, это то, что мне нужно :) –