Может кто-нибудь объяснить, пожалуйста, следующий кусок кода? Это код для двойной буферизации, используемый для разработки игр в Java - PullRequest
0 голосов
/ 21 октября 2019

Я хотел использовать двойную буферизацию для своего кода, и я нашел это в интернете. Но я не понимаю, как это работает.

private Image doubleBuffer;

public void update(Graphics g) {
    Dimension size = getSize();
    if (doubleBuffer == null || doubleBuffer.getWidth(this) != size.width || doubleBuffer.getHeight(this) != size.height){
        doubleBuffer = createImage(size.width, size.height);
    }
    if (doubleBuffer != null) {
        Graphics g2 = doubleBuffer.getGraphics();
        paint(g2);
        g2.dispose();
        g.drawImage(doubleBuffer, 0, 0, null);
    }
    else {
        paint(g);
    }

1 Ответ

1 голос
/ 21 октября 2019

Техника двойного буфера работает таким образом, что вы визуализируете / отрисовываете всю графику в внеэкранный буфер (закадровое изображение), часто называемый backbuffer. Как только все рендеринг / отрисовка завершены, задний буфер рисуется / копируется в экранный буфер.

Код начинается с получения размеров того, что предположительно является экраном или окном. Затем код проверяет, существует ли двойной буфер (например, буфер), или ширина и высота (размеры) буферного буфера отличаются от экранного буфера (например, если пользователь изменил размер своего окна или изменил разрешение экрана). Если двойной буфер (backbuffer) не существует или измерения отличаются, создается новый буфер с теми же измерениями, что и на экране.

Код проверяет, было ли создание успешным (или что двойной буфер существует),получает графический контекст буфера, вызывает paint () (где, по-видимому, выполняется весь рендеринг) с графическим контекстом буферных буферов, а затем копирует буфер на экран.

Если по какой-то причине код былневозможно создать буфер, вызывается метод paint () с графическим контекстом на экране (я предполагаю, что переменная g содержит графический контекст на экране), и рендеринг выполняется непосредственно в этом графическом контексте (например, на экране).

Надеюсь, это поможет.

Удачи в игре.

...