



![]()
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 -