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 -