BufferStrategy и DIY Double Buffering в JFrame - PullRequest
0 голосов
/ 14 января 2010

До сих пор я делал двойную буферизацию, создавая и Image, рисуя то, что я хотел, этому Image, используя связанный с ним объект Graphics, а затем выводил это изображение на экран, используя объект Graphics метода рисования. Недавно я узнал о классе BufferStrategy и его использовании. Мне было интересно, каковы плюсы и минусы двух методов.

EDIT: Я не думаю, что я ясно изложил свой вопрос. Я хотел знать плюсы и минусы как метода «сделай сам», так и BufferStrategy, и когда, если вообще когда-либо, мне следует использовать один или другой.

Ответы [ 2 ]

7 голосов
/ 15 января 2010

У меня всегда были хорошие результаты при использовании значения по умолчанию BufferStrategy, когда я старался

  • Всегда создавать компоненты графического интерфейса на EDT
  • Никогда не рисовать из нити, кроме EDT

Этот превосходный пример должен двойной буфер, потому что он непрерывно рисует в начальном потоке, а не EDT . Напротив, этот довольно занятый пример опирается только на repaint(), вызываемый в ответ на Swing Timer. Мне редко нужен внеэкранный буфер, за исключением смесь . Наконец, в этой учебной статье содержатся дополнительные рекомендации.

1 голос
/ 14 января 2010

Я рекомендую прочитать Рисование в AWT и Swing , если у вас его нет.

Я не думаю, что вам обычно нужна двойная буферизация "Сделай сам", если вы используете JFrame,В Swing встроена двойная буферизация, которая включена по умолчанию.Вручную сделав это самостоятельно, вы просто замедлит процесс.Вы можете проверить, включена ли двойная буферизация, вызвав isDoubleBufferingEnabled () для любого из ваших JComponents.

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

...