ページ 11

ホワイトフェード

Posted: 2009年12月29日(火) 23:26
by mat
こんにちは
このサイトの「ゲームプログラミングの館」を見て普通のフェードインの方法はわかったのですが,
ホワイトフェードインの仕方が分かりません
どのようにすればよいでしょうか

Re:ホワイトフェード

Posted: 2009年12月30日(水) 00:05
by SooA
白い画像(グラフィックハンドル)を用意して
上にかぶせて、徐々に透明にしていくとか

Re:ホワイトフェード

Posted: 2009年12月30日(水) 14:12
by Dixq (管理人)
サンプルを書いてみました。
やっていることはSooAさんの仰るとおり、白をかぶせているだけです。
SetDrawBlendModeでアルファ値を設定しておき、その上に白の四角形を描画しています。
#include <DxLib.h>

void DrawWhiteFade(int Bright){
    SetDrawBlendMode(DX_BLENDMODE_ALPHA, Bright);
    DrawBox(0,0,640,480,0xFFFFFF,TRUE);
    SetDrawBlendMode(DX_BLENDMODE_NOBLEND, 0);
}

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
    int Count=0;
    ChangeWindowMode(TRUE);
    if(DxLib_Init() == -1 || SetDrawScreen( DX_SCREEN_BACK )!=0) return -1;
 
    while(!ScreenFlip() && !ProcessMessage() && !ClearDrawScreen() && !CheckHitKey(KEY_INPUT_ESCAPE)){
        DrawString(0,0,"Hello World",0xFFFFFF);
        DrawString(200,(Count*4)%480,"Hello World",0xFFFFFF);
        DrawWhiteFade( Count%255 );
        Count++;
    }
 
    DxLib_End();
    return 0;
}
 

Re:ホワイトフェード

Posted: 2009年12月30日(水) 22:20
by mat
丁寧な回答どうもありがとうございました
解決しました

Re:ホワイトフェード

Posted: 2009年12月30日(水) 22:37
by おむすび
以前、作ったものです。
よかったら使ってください。
フェードインとフェードアウトがあります。
戻り値がフェードが終わったか?
引数がカラー 白なら 0xFFFFFF スピードが速さです。
//  フェードイン
bool FadeIn(int Color ,int Speed){
    static int Air = 255;

    // 描画ブレンドモードをαブレンドにする
    SetDrawBlendMode(DX_BLENDMODE_ALPHA,Air);
    // グラフィックの描画 
    DrawBox(0,0,WIN_W,WIN_H,Color,true);
    // 描画ブレンドモードをノーブレンドにする
    SetDrawBlendMode( DX_BLENDMODE_NOBLEND , 0 ) ;

    Air -= Speed;
    if(Air <= 0){
        Air = 0;
        return true;
    }else{
        return false;
    }
}

//  フェードアウト
bool FadeOut(int Color ,int Speed){
    static int Air = 0;

    // 描画ブレンドモードをαブレンドにする
    SetDrawBlendMode(DX_BLENDMODE_ALPHA,Air);
    // グラフィックの描画 
    DrawBox(0,0,WIN_W,WIN_H,Color,true);
    // 描画ブレンドモードをノーブレンドにする
    SetDrawBlendMode( DX_BLENDMODE_NOBLEND , 0 ) ;
    
    Air += Speed;
    if(Air >= 255){
        Air = 255;
        return true;
    }else{
        return false;
    }
}