39. αブレンド(その2)
今度はこれらの違いがもっとはっきりわかるようにフェードアウト、フェードインを繰り返してみます。
#include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){ ChangeWindowMode( TRUE ) ; //ウィンドウモードに変更 if( DxLib_Init() == -1 ) return -1; // DXライブラリ初期化処理 エラーが起きたら終了 int count=0,flag=-1; SetDrawScreen( DX_SCREEN_BACK ) ; // 描画先を裏画面に設定 while( CheckHitKey( KEY_INPUT_ESCAPE )==0 ){ //エスケープキーが入力されていない間ループ ClearDrawScreen(); // 裏画面のデータを全て削除 DrawBox(0, 0,640, 50,GetColor(255,255,255),TRUE); //白い四角形を描画 DrawBox(0, 50,640,100,GetColor(255, 0, 0),TRUE); //赤い四角形を描画 SetDrawBright ( count , count , count ) ; //countの明るさにセット LoadGraphScreen( 0 , 0 , "char.png" , TRUE ) ; //画像を表示。 SetDrawBright ( 255 , 255 , 255 ) ; //元の明るさにリセット SetDrawBlendMode( DX_BLENDMODE_ALPHA , count ) ; //以後countの明るさでαブレンドする LoadGraphScreen( 400 , 0 , "char.png" , TRUE ) ; //画像を表示。 SetDrawBlendMode( DX_BLENDMODE_NOBLEND , 0 ) ; //ブレンドモードをリセットする。 if(count>255 || count<0) flag*=-1; //count上昇モード下降モード分岐 if(flag==-1) count+=2; //インクリメント if(flag== 1) count-=2; //デクリメント if( ProcessMessage() == -1 ) break ; //エラーが起きたら終了 ScreenFlip() ; // 裏画面データを表画面へ反映 } DxLib_End() ; // DXライブラリ使用の終了処理 return 0 ; // ソフトの終了 }
実行結果
αブレンドだとちゃんと背景色が影響している事がわかりましたか?
キャラがす〜〜っと消えていくようなモーションを作るときは輝度の変更ではなく、αブレンドしてやらないと
いけないことが解ると思います。ブレンドモードにはαブレンドのほかにも色々あります。
本家DXライブラリのリファレンスページに詳しく乗っているのでこちらのサンプルも実行してみてください。
http://homepage2.nifty.com/natupaji/DxLib/dxfunc.html#R3N17
- Remical Soft -