Javaデュアルバッファメカニズム

1703 ワード

グラフィックの移動時に点滅する現象は、同じ図面の表面にグラフィックを繰り返し描画して消去することによるものです.
たとえば、PanleコンポーネントのGraphicsオブジェクト上で常にグラフィックの描画が行われ、小さなボールのグラフィックを描画した後、すぐに小さなボール座標を更新し、repaint()メソッドを呼び出して既存のグラフィックを消去し、新しいグラフィックを描画します.この過程は繰り返し,迅速に行われており,グラフィックシンチレーションが発生しやすい.この問題は二重バッファ機構によって解決できる.
デュアルバッファメカニズムは、2つの異なるバッファを使用してグラフィックを描画することです.グラフィックは、表示デバイスに対応するバッファで直接描画するのではなく、まずバックアップバッファで描画し、バックアップバッファの内容をデバイスバッファに全体的にコピーして、グラフィックの描画速度を速め、グラフィックの描画効果を向上させます.
デュアルバッファメカニズムには、2つのプロセスがあります.これは、オフラインペイント(Draw to Off-Screen)と前画面表示(Paint to On-Screen)と呼ばれます.画面外描画フェーズでは、画像Imageオブジェクトのバッファをバックバッファとして使用し、グラフィック描画を行い、フロントスクリーン表示フェーズではバックバッファのデータを直接デバイスバッファにコピーして表示することができ、デバイスバッファはフロントスクリーンバッファまたはメインインタフェースとも呼ばれる.
画面外の描画手順:
(1)イメージオブジェクトを作成する
(2)Graphicsオブジェクトの取得(バッファ)
(3)描画図形の設定
(4)イメージにグラフィックを描く
//    gameRender()          
	public void gameRender() {
		//  Image  ,          
		Image im = createImage(getWidth(),getHeight());
		Graphics dbg = im.getGraphics();		//      Graphics  
		dbg.setColor(Color.blue);
		dbg.fillOval(x, y, diameter, diameter);	//int diameter      
	}

以上のプログラムでは、バックアップバッファとして画像バッファを採用し、画像のgetGraphics()メソッドを呼び出すことで画像バッファの制御権を取得し、そこに図形を描画する.
フロントスクリーン表示手順
(1)現在の画面のGraphicsオブジェクトを取得する
(2)イメージバッファの内容をコピーする
(3)現在の画面のGraphicsオブジェクトを解放する
//    gamePaint()          
	public void gamePaint() {
		Image im = createImage(getWidth(),getHeight());
		Graphics g = this.getGraphics();
		g.drawImage(im,0,0,null);
		g.dispose();
	}
以上のプログラムは、現在のコンポーネントのgetGraphics()メソッドを呼び出してフロントスクリーンバッファの制御権を取得し、drawImage()メソッドを呼び出して画像バッファの内容をフロントスクリーンバッファにコピーし、このメソッドの最初のパラメータはソース画像オブジェクトを表し、2番目のパラメータと3番目のパラメータはそれぞれターゲット領域の左上隅の横座標と縦座標を表す.