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チュートリアルから

最初にそこにあるコードは、このビットを使用して「バックバッファー」になる最初の方法で画像を作成します。i は次のようなフィールドである可能性があります。

 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

それらが終了すると、ビットマップは「実際の」(スクリーン) Graphicsobjectに描画されますg。そのため、ユーザーは中途半端な描画を見ることがなく、ちらつきがなくなります。

フィールドiは最初に割り当てられてから再利用されるため、一度だけ使用されるわけではありません。

于 2012-11-23T17:17:20.733 に答える