第四十二章 试着制作闪屏(Flash)特效吧

>>点此回到教程目录

本章的内容并不是特别重要。由于考虑到今后自己可能会使用这个特效,因此就实现了。

那就是“Flash”。一瞬间让画面变白进行闪屏。

是的,这一次我们也按照老规矩来。

定义结构体、声明变量,然后进行“登录、计算、绘制”这一过程。

我们制作两种闪屏。

种类0的闪屏效果是在指定时间内逐渐变亮然后再逐渐变暗。

种类1的闪屏效果是一开始突然屏幕全白,然后在指定的时间内渐渐变暗——这是一般的闪屏类型。

—-在 GV.h 中进行以下追加 —-

GLOBAL flash_t flash;//(42)

—-在 struct.cpp 中进行以下追加 —-

//闪屏(42)
typedef struct{
        //flag、计数器、闪屏的种类、在多少计数值中显示
        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カウントで変化 在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;//1在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();//背景绘制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);//Boom的特效
        graph_effect(2);//Boom线的特效
        graph_effect(3);//Boom角色的特效
        graph_stage_title();//Title的显示
        graph_board();//面板的绘制

        /***修改请注意***/
        graph_flash();//闪屏的绘制
        /***修改请注意***/

        graph_develop();
}

运行结果


>>点此回到教程目录

results matching ""

    No results matching ""