2

我在互联网上找到了这个双缓冲代码,但没有解释。我对这段代码有点困惑。

  • 为什么使用图像“i”?如果要使用一次,它有什么用?

  • 当我们已经设置颜色时,为什么我们将更改颜色分配给前景色?

  • g.drawImage() 方法在做什么?

这是代码:

public void update(Graphics g)
{
    if(i==null)
    {
        i=createImage(getWidth(), getHeight());
        graph=i.getGraphics();
    }

    graph.setColor(getBackground());
    graph.fillRect(0, 0, getWidth(),getHeight());
    graph.setColor(getForeground());

    paint(graph);

    g.drawImage(i,0,0,this);
  }

问候

4

2 回答 2

6

双缓冲的基本思想是在屏幕外创建图像,然后一次将其全部显示。

双缓冲

这里找到的java教程

您在那里的代码首先会在第一次通过时创建一个图像,作为您的“后台缓冲区”,我可能是一个字段,例如

 private Image i;
 private Graphics graph;

 if(i==null)
{
    i=createImage(getWidth(), getHeight());
    graph=i.getGraphics();
}

然后用这个将背景颜色绘制到图像上

graph.setColor(getBackground());
graph.fillRect(0, 0, getWidth(),getHeight());

然后设置正面准备绘图。

graph.setColor(getForeground());
paint(graph); /draws

最后将背面缓冲区绘制到主表面。

g.drawImage(i,0,0,this);
于 2012-11-23T17:18:37.947 回答
2

图形操作都是在从Graphics获得的i,这是内存中的位图上执行的。

完成后,位图将绘制到“真实”(屏幕)Graphics对象上g。所以用户永远不会看到半成品的绘图,从而消除了闪烁。

该字段i是第一次分配然后重用的,因此它不是只使用一次。

于 2012-11-23T17:17:20.733 回答