35. 画面を段々暗く & 段々明るく

フェードイン、フェードアウトといって、画面を次第に明るくしたり、次第に暗くしたりといったことは、

物語が始まる時や終わるときによく用いられる手法ですね。

これは画面の輝度を使うことで実現できます。

今回はカウンターを用いて、カウントし、画面を段々明るく&段々暗くという事を行います。

画面の輝度を設定する時にはSetDrawBright( R , G , B );という関数を用います。

R,G,Bには0~255の値が入り、それぞれ赤、緑、青の輝度を示します。

SetDrawBright( 255 , 255 , 255 );

この状態は通常の状態。全て赤緑青の明るさが全て255の状態です。

今の状態から明るさを減らさない状態と覚えるといいでしょう。

輝度を245にすると通常の明るさより10減らすといった感じです。

通常の明るさより増やす事はできません。ですから

SetDrawBright( 0 , 0 , 0 );

これは真っ暗な状態です。

SetDrawBright( 0 , 0 , 0 );

描画

SetDrawBright( 1 , 1 , 1 );

描画

SetDrawBright( 2 , 2 , 2 );



としていき、0〜255まであげてやれば段々明るくなりますね。

段々暗くする時はその逆を、通常の明るさに戻したい時は SetDrawBright( 255 , 255 , 255 ); と

書けばいいのです。


#include "DxLib.h"
 
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
        
        ChangeWindowMode( TRUE ) ;                   //ウィンドウモードに変更
        if( DxLib_Init() == -1 ) return -1;      // DXライブラリ初期化処理 エラーが起きたら終了 
         
        int c=0,White;
 
        White = GetColor( 255 , 255 , 255 ) ;    //色の取得
        SetDrawScreen( DX_SCREEN_BACK ) ;        // 描画先を裏画面に設定
   
        while( 1 ){
                ClearDrawScreen();                   // 裏画面のデータを全て削除
                
                if(c>=0 && c<256)                    //cが0~256の時
                        SetDrawBright( c , c , c );        //段々あかるく(c= 0->255)
                if(c>=256 && c<400)                  //cが256~400の時
                        SetDrawBright( 255 , 255 , 255 );  //通常の明るさ
                if(c>=400 && c<400+256)              //cが400~400+256の時
                        SetDrawBright( 255-(c-400) , 255-(c-400) , 255-(c-400) );//段々暗く(c= 255->0)
 
                DrawBox( 0 , 0 , 640 , 480 , White , TRUE) ;  //画面全体に白い四角形を描画
 
                c++;                                  //cをカウントアップ
 
                if(c==400+256) break;                 //暗くなり終わったら終了
                if( ProcessMessage() == -1 ) break ;                 //エラーが起きたら終了
        ScreenFlip() ;                                       // 裏画面データを表画面へ反映
        }
 
        DxLib_End() ;                                            // DXライブラリ使用の終了処理
        return 0 ;                                               // ソフトの終了
}

実行結果(例)


→掲示板で質問する



- Remical Soft -