弾にグレイズしたかどうかの情報を持たせます。
struct.hのbullet_tに以下を追加
グレイズ判定関数を作成します。当たり判定用に用意されている関数を使うと楽です。
out.cppに以下を追加
//敵ショットのグレイズ判定
int graze_judge_enemyshot(int s,int n){
if(shot[s].bullet[n].cnt>0){//ショットの軌道が1度でも計算されていたら
return out_judge(
shot[s].bullet[n].x,shot[s].bullet[n].y,ch.x,ch.y,
bullet_info[shot[s].bullet[n].knd].range+10,CRANGE*ch.crange_rate,
shot[s].bullet[n].spd,shot[s].bullet[n].angle
);
}
return 0;
}
//ボスショットのグレイズ判定
int graze_judge_bossshot(int n){
if(boss_shot.bullet[n].cnt>0){//ショットの軌道が1度でも計算されていたら
return out_judge(
boss_shot.bullet[n].x,boss_shot.bullet[n].y,ch.x,ch.y,
bullet_info[boss_shot.bullet[n].knd].range*boss_shot.bullet[n].size+10,CRANGE*ch.crange_rate,
boss_shot.bullet[n].spd,boss_shot.bullet[n].angle
);
}
return 0;
}
グレイズをしたとき、エフェクト画像を飛ばします。
効果音はアイテム獲得時のものを使います。
GV.hに以下を追加
load.cppのload()に以下を追加
img_eff_graze = LoadGraph( "../dat/img/effect/kiran.png");
sound_se[5]=LoadSoundMem("../dat/se/item_get.wav");//グレイズ時の効果音
//グレイズ時のエフェクト
void enter_graze_effect(){
int k=search_effect();
if(k!=-1){
effect[k].ang=0;
effect[k].brt=255;
effect[k].cnt=0;
effect[k].col=0;
effect[k].eff=0;
effect[k].flag=1;
effect[k].img=img_eff_graze;
effect[k].knd=11;
effect[k].mvang=rang(PI2);
effect[k].r=0.3;
effect[k].spd=1.5;
effect[k].x=ch.x;
effect[k].y=ch.y;
se_flag[5]=1;
}
}
グレイズ時の処理を追加します。
enemy_shot_and_ch()に以下を追加
if(shot[s].bullet[n].graze_flag==0){//グレイズ判定
if(graze_judge_enemyshot(s,n)==1){
enter_graze_effect();
ch.score+=100;
ch.graze++;
shot[s].bullet[n].graze_flag=1;
}
}
if(boss_shot.bullet[n].graze_flag==0){//グレイズ判定
if(graze_judge_bossshot(n)==1){
enter_graze_effect();
ch.score+=100;
ch.graze++;
boss_shot.bullet[n].graze_flag=1;
}
}
effect.cppのeffect_calc()に以下を追加
case 11://グレイズエフェクト
effect[i].spd-=1.5/60;
effect[i].ang+=PI2/20;
if(effect[i].cnt==60){
effect[i].flag=0;
}
effect[i].cnt++;
break;
あとは発射するときにgraze_flagが0になるようにすればうまくいくはずです。