2章.フルスクリーン画面にBMP画像を単純に表示する2(&画面の説明) |
||||||
1999.5.4 |
||||||
|
LGPの画面構造を更に深く見てみましょう。1章のプログラムを以下のように変更してみてください。 CH=G@SETUP( 640 , 480 , 16 , 0 ) //画面初期化
BM=G@CHRLOAD("TEST.BMP") //画像読み込み
G@CHRCOPY( BM , CH ) //画像を画面にコピー
LOOP
G@FLIP( ) //フリップ
ENDLOOP
変更点は、S@WAIT関数のあった所にG@FLIP関数を移行しS@WAIT関数を削除しただけです。 どうでしょうか?画面がチカチカとちらついて表示されていると思いますが、これはLGPの動作を体験してもらう為にわざとこの状態にしています。
画面がチカチカとちらついて表示される原因について説明します。まず、それにはワーク画面の詳細に付いて知る必要があります。 1章で「一旦ワーク画面に描いた後、モニターに表示する」と書きましたが、同ワーク画面は実は2つあるのです。なぜ2つあるのか?これは1つしかワーク画面が無い場合を考えれば簡単に理解できます。1つしかワーク画面が無ければ、描いている間はモニターに表示するものが無いので真っ暗になると言う事になります。そこで2つのワーク画面を使い、描き終わったワーク画面を表示中に、もう1つのワーク画面に描画を行う事で、真っ暗になる事を防ぎます。 これを踏まえて画面のチカチカを考えます。G@CHRCOPY関数でBMP画像を画面にコピーしているのは1回のみと言う事は、2つあるワーク画面の1つにしかコピーを行っていません。1章ではG@FLIP関数を1回のみ実行しているので、BMP画像をコピーしたワーク画面がモニターに表示されました。しかし、2章ではG@FLIP関数を繰り返し実行している為、何もコピーされていない(つまり初期化されていない)ワーク画面と、BMP画像をコピーしたワーク画面が交互にモニターに表示され、モニターがチカチカするのです。 で、チカチカを起さない方法ですが、下のように、2つのワーク画面をG@FLIP関数で切り替えながら両方にBMP画像をコピーすればよいでしょう。 CH=G@SETUP( 640 , 480 , 16 , 0 ) //画面初期化
BM=G@CHRLOAD("TEST.BMP") //画像読み込み
G@CHRCOPY( BM , CH ) //画像を画面にコピー
G@FLIP( ) //フリップ
G@CHRCOPY( BM , CH ) //画像を画面にコピー
LOOP
G@FLIP( ) //フリップ
ENDLOOP
|