ホワイトフェード

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
mat

ホワイトフェード

#1

投稿記事 by mat » 15年前

こんにちは
このサイトの「ゲームプログラミングの館」を見て普通のフェードインの方法はわかったのですが,
ホワイトフェードインの仕方が分かりません
どのようにすればよいでしょうか

SooA

Re:ホワイトフェード

#2

投稿記事 by SooA » 15年前

白い画像(グラフィックハンドル)を用意して
上にかぶせて、徐々に透明にしていくとか

Dixq (管理人)

Re:ホワイトフェード

#3

投稿記事 by Dixq (管理人) » 15年前

サンプルを書いてみました。
やっていることは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;
}
 

mat

Re:ホワイトフェード

#4

投稿記事 by mat » 15年前

丁寧な回答どうもありがとうございました
解決しました

おむすび

Re:ホワイトフェード

#5

投稿記事 by おむすび » 15年前

以前、作ったものです。
よかったら使ってください。
フェードインとフェードアウトがあります。
戻り値がフェードが終わったか?
引数がカラー 白なら 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;
    }
}

閉鎖

“C言語何でも質問掲示板” へ戻る