概要 | チュートリアル | 機能一覧 | 関数名一覧 | 機能別一覧 | 色見本 | 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();