Java-совместимая проблема производительности графики

1

Я работаю над Java 2D-видеоигрой и разрабатываю ее в Mac OS X 10.10.1. Я пытаюсь сделать все это с помощью Java 2D api и избегать сторонних библиотек. Кажется, у меня возникают проблемы с обновлением экрана, где иногда вещи обновляются очень быстро, а иногда иногда кажется, что они распыляются, как будто нерешительно обновлять.

От чтения комментариев других людей относительно производительности Java 2D я переключил все мои графические изображения на использование VolatileImage, а для любой графической информации, которая не является динамической, я выполняю закадровое копирование и копируюсь на вызов экрана путем вызова в моей программе paintComponent (которая отключается таймер). И эти изображения создаются как VolatileImage.

Я заметил это резкое поведение экрана после того, как сделал эти улучшения производительности (например, VolatileImages и offScreen). Теперь я сделал эти изменения, чтобы воспользоваться аппаратным ускорением. Как я могу проверить, происходит ли это? И, какие-либо идеи о том, как исправить эту проблему с резким обновлением экрана, я сейчас продолжаю? Я видел, как люди говорили об использовании динамических таймеров, которые будут пересчитывать, сколько времени ждать следующего обновления, учитывая фактическое время, потраченное на текущее обновление, чтобы попытаться получить плавно обновленные графические движения. Это способ сделать это? Или я чего-то не хватает?

Благодарю.

  • 0
    Использование динамического таймера, как вы описали, сгладит частоту кадров вашего Java-приложения. Без более конкретного описания вашей игры, я не могу предложить больше ничего. Я написал симуляцию Spirograph на Java Swing, которая отображает сотни тысяч точек за 5 миллисекунд.
Теги:
graphics2d
java-2d

1 ответ

0

Вы упомянули paintComponent, поэтому я предполагаю, что вы используете Swing. Swing имеет двойную буферизацию по умолчанию, вы не должны добавлять еще один слой двойной буферизации. Если вы хотите увидеть, как работает ваше приложение Swing без двойной буферизации Swing, добавьте аргумент -Dawt.nativeDoubleBuffering = true в аргументы JVM. Также обратите внимание, что двойная буферизация не улучшает производительность кадров в секунду, а только воспринимаемую производительность, см. Это

См. Также: Ускорение аппаратного обеспечения Java

и это: Java: VolatileImage медленнее, чем BufferedImage

Ещё вопросы

Сообщество Overcoder
Наверх
Меню