EzGraph : Eazy Graphic Library

概要 チュートリアル 機能一覧 関数名一覧 機能別一覧 色見本 MMLの書き方

ダブルバッファリングとは?

一般に、コンピュータを使って2次元の絵を描く場合、まず背景を描き、 その後、遠くにある物体から順に描いていきます。静止画の場合は これで問題ありませんが、アニメーションさせる場合、背景や物体を 描写する過程が見えてしまい、画面のチラツキの原因となってしまいます。

そのため、アニメーションをさせる場合は、一旦別の画面(オフスクリーンと いいます)に描いておき、画面に一気に表示させることでこのちらつきを なくします。このような技法をダブルバッファリングと呼びます。

ダブルバッファリングなし ダブルバッファリングあり

上図の左は背景から順に描いていった場合、右はダブルバッファリングを 適用した場合のイメージです。左のアニメーションより、右のアニメーションの 方が見易いと思います。

もう少し具体的に説明します。下図のようにダブルバッファリングを 用いない場合は、表示画面に背景から順に描写していきます。 例えば、空港を背景にして、飛行機が離陸する場面を描きます。 まず、背景である管制塔と滑走を描きます。次に、飛行機を描き一フレームの 描写が完成します。アニメーションをする場合は、一フレーム描き終わった後、 少し待機し、画面を消去した上で次のフレームを描きます。


ダブルバッファリングを用いない場合
一方、ダブルバッファリングを用いる場合は、背景や物体の描写は 表示画面ではなく、オフスクリーンに対して行う。そのため、 ユーザには描写の過程が見えない。全ての描写が完了した後、 オフスクリーンの内容を表示画面に一気に転送する。

ダブルバッファリングを用いる場合

ダブルバッファリングの実現方法

EzGraphでは、描写系の関数名の最後に'B'を付けるとオフスクリーンへの 描写関数になります。例えば、オフスクリーンに正円を描きたい場合は、 EzDrawCircleB関数になります。オフスクリーンに描写した絵を表示させる場合は、EzShowBuffer関数を使用します。なお、EzShowBuffer関数を呼び出した後は、オフスクリーンは黒で初期化されるので注意して下さい。

具体的にサンプルコードを示します。コード全体は、 ダブル・バッファリングなしダブル・バッファリングあり からダウンロードできます。

[ダブル・バッファリングなし]
    /* 外壁(以前の描写オブジェクトを背景で上書き) */
    EzSetColorByPixel(255,255,0);
    EzFillBox(30,80,570,520);

    /* 座標計算 */
    bx += dx;
    by += dy;

    /* ボール描写 */
    EzSetColorByPixel(255,0,0);
    EzFillCircle(bx+50, by+100, 10);

[ダブル・バッファリングあり]
    /* 外壁 */
    EzSetColorByPixel(255,255,0);
    EzFillBoxB(30,80,570,520);

    /* 座標計算 */
    bx += dx;
    by += dy;

    /* ボール描写 */
    EzSetColorByPixel(255,0,0);
    EzFillCircleB(bx+50, by+100, 10);

    /* オフスクリーンのオブジェクトを表示 */
    EzShowBuffer();

チュートリアルの目次

  1. 初歩的な使い方
  2. 複雑な図形描写
  3. イベントドリブン
  4. ダブルバッファリング
  5. 画像ファイルの表示
  6. リアルタイムなキー入力
  7. ネットワーク機能

Takahiro SASAKI
E-mail: sasaki at arch.info.mie-u.ac.jp