42 章

今回は特に重要じゃないです。今後私が個人的に使いたいなと思っている演出があるので、実装してみます。

それは「フラッシュ」です。画面を一瞬白くさせてフラッシュを演出してみます。

はい、今回もお決まりです。

構造体用意して、変数宣言して、「登録、計算、描画」を作ります。

フラッシュは2種類作ってみます。

指定した時間で段々あかるくなり、段々暗くなるタイプ、これを種類0とします。

最初いきなり真っ白で、指定した時間で段々暗くなる通常フラッシュタイプ。これを種類1とします。


---- GV.h に以下を追加 ----

GLOBAL flash_t flash;//(42)


---- struct.cpp に以下を追加 ----

//フラッシュ(42)
typedef struct{
        //フラグ、カウンタ、フラッシュの種類、何カウントで表現するか
        int flag,cnt,knd,to_cnt;
        //明るさ
        double brt;
}flash_t;



---- ini.cpp の ini() 関数内の以下を変更・追加 ----

        boss.appear_count[0]=20;


---- boss_shotH.cpp に以下を追加 ----

//フラッシュサンプル(42)
void boss_shot_bulletH011(){
#define TM009 420
#define DIST 60
    int t=boss_shot.cnt%TM009,t2=boss_shot.cnt;
        if(t2==60){
                flash.flag=1;
                flash.knd=0;//段々明るく、段々暗く
                flash.to_cnt=30;//30カウントで変化
                flash.cnt=0;
        }
        if(t2==180){
                flash.flag=1;
                flash.knd=1;//フラッシュ!
                flash.to_cnt=90;//90カウントで変化
                flash.cnt=0;
        }
        if(t2==260){
                flash.flag=1;
                flash.knd=0;//段々明るく、段々暗く
                flash.to_cnt=15;//15カウントで変化
                flash.cnt=0;
        }
        if(t2==380){
                flash.flag=1;
                flash.knd=1;//フラッシュ!
                flash.to_cnt=30;//30カウントで変化
                flash.cnt=0;
        }

}


---- func.h の赤部を追加変更 ----

extern void boss_shot_bulletH011();//(42)

void (*boss_shot_bullet[DANMAKU_MAX])() =
{
        boss_shot_bulletH011,
        boss_shot_bulletH010,
        boss_shot_bulletH009,
        boss_shot_bulletH008,
        boss_shot_bulletH007,
        boss_shot_bulletH006,
        boss_shot_bulletH005,
        boss_shot_bulletH004,
        boss_shot_bulletH003,
        boss_shot_bulletH002,
        boss_shot_bulletH001,
        boss_shot_bulletH000,
        boss_shot_bulletH000,
        boss_shot_bulletH000,
        boss_shot_bulletH000,
        boss_shot_bulletH000,
        boss_shot_bulletH000,
};

---- calc.cpp に以下赤字部を追加 ----

//フラッシュ(42)
void calc_flash(){
        if(flash.flag>0){
                if(flash.knd==0){
                        if(flash.cnt==0)flash.brt=0;
                        if(flash.cnt<flash.to_cnt)
                                flash.brt+=255.0/flash.to_cnt;
                        else
                                flash.brt-=255.0/flash.to_cnt;
                }
                if(flash.knd==1){
                        if(flash.cnt==0)flash.brt=255;
                        flash.brt-=255.0/flash.to_cnt;
                }
                flash.cnt++;
                if(flash.knd==0){
                        if(flash.cnt>flash.to_cnt*2)
                                flash.flag=0;
                }
                if(flash.knd==1){
                        if(flash.cnt>flash.to_cnt)
                                flash.flag=0;
                }
        }
}

void calc_main(){
        calc_stage_title();
        calc_item();
        calc_flash();//フラッシュ(42)
}


---- graph.cpp に以下を追加変更 ----

//フラッシュ描画(42)
void graph_flash(){
        if(flash.flag>0){
                SetDrawBlendMode( DX_BLENDMODE_ALPHA, (int)(flash.brt) );
                DrawBox(FX,FY,FX+FMX,FY+FMY,color[0],TRUE);
                SetDrawBlendMode( DX_BLENDMODE_NOBLEND, 0 );
        }
}

void graph_main(){

        if(bright_set.brt!=255)SetDrawBright(bright_set.brt,bright_set.brt,bright_set.brt);

        graph_back_main();//背景描画メイン
        graph_effect(0);//敵が死ぬエフェクト

        if(bright_set.brt!=255)SetDrawBright(255,255,255);

        graph_effect(4);//喰らいボムのエフェクト

        if(bright_set.brt!=255)SetDrawBright(bright_set.brt,bright_set.brt,bright_set.brt);

        graph_child();
        graph_item();//アイテム描画
        graph_boss();
        graph_enemy();//敵の描画
        graph_cshot();//自機ショットの描画

        if(bright_set.brt!=255)SetDrawBright(255,255,255);

        graph_ch();//自機の描画

        if(bright_set.brt!=255)SetDrawBright(bright_set.brt,bright_set.brt,bright_set.brt);
        
        graph_lazer();//レーザーの描画
        graph_bullet();//弾の描画

        if(bright_set.brt!=255)SetDrawBright(255,255,255);

        graph_effect(1);//ボムのエフェクト
        graph_effect(2);//ボム線のエフェクト
        graph_effect(3);//ボムキャラのエフェクト
        graph_stage_title();//タイトルの表示
        graph_board();//ボードの描画
        graph_flash();//フラッシュ描画

        graph_develop();
}



実行結果



- Remical Soft -