今回も順番に解説していきます。
まず、先に「長方形塗りつぶし」をする自作関数「Boxfill」を説明しましょうかね。
サーフェイスのメンバ関数「Blt」については以前「
DirectDraw基礎 第9回」
でやっているので、構文等はそちらを参照して下さい。今回は、サーフェイスの一部を一色で塗りつぶし
たいので、
Blt関数の最初の引数にRECT構造体のアドレスを引き渡してやります。(RECT構造体の解説は「
DirectDraw基礎 第8回」
でやりました。)ってもう説明する事無いですね(汗
では次は、今回の本題「垂直基線待ち」をする自作関数「VsyncWait」の説明〜。
見ても解る通りDirectDrawオブジェクト(lpDD)がメンバ関数である「WaitForVerticalBlank」を呼び出します。
構文は以下の通りです。
| 書式 | HRESULT WaitForVerticalBlank( DWORD dwFlags, HANDLE hEvent );
|
| dwFlags | 以下のどれかを指定します。
| DDWAITVB_BLOCKBEGIN | 垂直帰線が開始するまで待つ |
| DDWAITVB_BLOCKBEGINEVENT | 垂直帰線が開始したらイベントを起動するらしいが、現在はサポートしてないらしい。 |
| DDWAITVB_END | 垂直帰線が終了するまで待つ |
|
| hEvent | サポートされていないので、とりあえずNULL |
| 戻り値 | 成功するとDD_OKが返ってくるらしい。 |
そんでもって、これらを使用した今回のメインコードはこれ。
ただひたすら「同じ場所に書いたり消したり」するだけで、右のスライムは垂直帰線待ちをし、
垂直帰線待ちがどういう働きをするかが一目で解るようなプログラムになっているのである。えっへん(゚o゜)\ばき☆