Я работаю над Java 2D-видеоигрой и разрабатываю ее в Mac OS X 10.10.1. Я пытаюсь сделать все это с помощью Java 2D api и избегать сторонних библиотек. Кажется, у меня возникают проблемы с обновлением экрана, где иногда вещи обновляются очень быстро, а иногда иногда кажется, что они распыляются, как будто нерешительно обновлять.
От чтения комментариев других людей относительно производительности Java 2D я переключил все мои графические изображения на использование VolatileImage, а для любой графической информации, которая не является динамической, я выполняю закадровое копирование и копируюсь на вызов экрана путем вызова в моей программе paintComponent (которая отключается таймер). И эти изображения создаются как VolatileImage.
Я заметил это резкое поведение экрана после того, как сделал эти улучшения производительности (например, VolatileImages и offScreen). Теперь я сделал эти изменения, чтобы воспользоваться аппаратным ускорением. Как я могу проверить, происходит ли это? И, какие-либо идеи о том, как исправить эту проблему с резким обновлением экрана, я сейчас продолжаю? Я видел, как люди говорили об использовании динамических таймеров, которые будут пересчитывать, сколько времени ждать следующего обновления, учитывая фактическое время, потраченное на текущее обновление, чтобы попытаться получить плавно обновленные графические движения. Это способ сделать это? Или я чего-то не хватает?
Благодарю.
Вы упомянули paintComponent, поэтому я предполагаю, что вы используете Swing. Swing имеет двойную буферизацию по умолчанию, вы не должны добавлять еще один слой двойной буферизации. Если вы хотите увидеть, как работает ваше приложение Swing без двойной буферизации Swing, добавьте аргумент -Dawt.nativeDoubleBuffering = true в аргументы JVM. Также обратите внимание, что двойная буферизация не улучшает производительность кадров в секунду, а только воспринимаемую производительность, см. Это
См. Также: Ускорение аппаратного обеспечения Java