DirectDrawでは、
カラーキーと呼ばれる色をサーフェイスに設定することにより、ブロック転送時にこの色の部分を転送しないように設定できる。これにより、背景を透かすことができる。これをスプライト処理と呼ぶ。※カラーキーについては用語集の「カラーキー」の項を参照
![]()
カラーキーは、Microsoftが作成したDirectDraw汎用モジュール「ddutil.cpp」に入っている
DDSetColorKey関数を使って設定できる。DDSetColorKey関数はサーフェイスのカラーキーを設定する機能を持つ。
DDSetColorKey(
カラーキーを指定するサーフェイス,
カラーキーにする色
);カラーキーにする色の指定には、次の方法がある。
- 1.透明色にしたい色を直接指定する:
RGB(Rの値, Gの値, Bの値)- RGBで指定された色を、透明色(カラーキー)に指定する。
- 2.左上1ピクセルの色を透明色に指定する:
CLR_INVALID- ビットマップ画像の左上1ピクセルに使用している色を、透明色(カラーキー)に指定する。
※カラーキーは、オフスクリーン・サーフェイス作成時に設定する。
《例1》
オフスクリーン・サーフェイス・オブジェクト「g_pDDSGame」に対して、RGB(21, 141, 91)を透明色に指定する。
g_pDDSGame = DDLoadBitmap(g_pDD, szGameBmp, 0, 0); if (g_pDDSGame == NULL) return InitFail(hWnd, hRet, "DDLoadBitmap GameBmp FAILED");DDSetColorKey(g_pDDSGame, RGB(21, 141, 91)); // カラーキー(抜き色)を指定《例2》
オフスクリーン・サーフェイス・オブジェクト「g_pDDSGame」に対して、左上1ピクセルの色を透明色に指定する。
g_pDDSGame = DDLoadBitmap(g_pDD, szGameBmp, 0, 0); if (g_pDDSGame == NULL) return InitFail(hWnd, hRet, "DDLoadBitmap GameBmp FAILED");DDSetColorKey(g_pDDSGame, CLR_INVALID); // カラーキー(抜き色)を指定《補足》
RGB値の調べ方は、実習編「DirectX小技集」を参照。
画像転送時、指定したカラーキーを使うかどうかはオプションによって指定する。
g_pDDSBack->BltFast(0, 0, g_pDDSStart, &startRect, DDBLTFAST_NOCOLORKEY);指定できるオプションは次のとおり。(DirectX7 Helpより)
- DDBLTFAST_DESTCOLORKEY
- 転送先カラーキーを使用する透過型ブリット。
- DDBLTFAST_NOCOLORKEY
- 非透過型の通常のコピーブリット。
- DDBLTFAST_SRCCOLORKEY
- 転送元カラーキーを使用する透過型ブリット。
- DDBLTFAST_WAIT
- ブリットがビジーの場合、DDERR_WASSTILLDRAWING メッセージを返さずに待機する。ブリットがセットアップされるか、あるいは別のエラーが発生すると即座に返す。
DDBLTFAST_NOCOLORKEYを指定すれば、カラーキーを含む画像でも、そのまま転送する。
DDBLTFAST_SRCCOLORKEYを指定すると、カラーキーに指定された色は転送されず、その色を使っているところは透明になる。
(詳しくは用語集の「カラーキー」の項を参照)
スタート画面用サーフェイス、ゲーム画面用サーフェイスにそれぞれカラーキーを設定し、「タイトル画像」「スタート画像」、ゲーム画面での「キャラクタ画像」をカラーキーを指定して転送せよ。
[ 実行結果サンプル ]