耐久弾幕というのは、
ボスに弾を当てて体力をけずるのではなく、一定時間弾幕を避けきることを目的とした弾幕
・・・のことです。(解釈がまちがっているかもしれませんが・・・)
この種類の弾幕を実装するためには、最低でも、
ボスの弾幕中であっても、
・自機ショットとボスの当たり判定
・自機とボスの当たり判定
をなくす
ことが必要だと考えました。
そこで、一番目の「自機のショットとボスの当たり判定を消す」処理から書いていこうと思ったのですが、
ホーミング弾がボスに吸いついたようになったまま消えない
という現象が起きてしまいました・・・
添付ファイルのような感じです。
cshot.cppに何か処理を加えてあげれば良さそうなのですが、どのような処理を追加するのが最善の方法なのでしょうか・・・
アドバイスよろしくお願いします。
____以下は追加した部分です____
・struct.h内のボスの構造体に、耐久弾幕かどうかのフラグ、
s_flagを追加(1なら耐久)
・out.cppの赤文字部分を追加
int out_judge_cshot_boss(int i){ if(cshot.cnt>0){//ショットの軌道が1度でも計算されていたら if(boss.s_flag==0){ if(out_judge(cshot.x,cshot.y,boss.x,boss.y, cshot_range[cshot.knd],BRANGE,cshot.spd,cshot.angle)){ return 1; } } } return 0; }
・graph.cppの赤文字部分を追加
void graph_boss(){ int i; if(boss.flag==0)return; if(boss.s_flag==0){ graph_boss_effect(); DrawRotaGraphF(boss.dx+FX+dn.x,boss.dy+FY+dn.y, 1.0f,0.0f,img_dot_riria[0],TRUE); } if(boss.hp_max==0){printfDx("graph_boss内0割り\n");return;} for(i=0;i<FMX*0.98*boss.hp/boss.hp_max;i++){ if(boss.back_knd[boss.knd]==1) DrawGraph(3+FX+i+dn.x,2+FY+dn.y,img_etc[7],FALSE); else DrawGraph(3+FX+i+dn.x,2+FY+dn.y,img_etc[1],FALSE); } }
・boss_shot.cpp内の赤文字部分を追加
void enter_boss(int num){
if(num==0){//中ボス開始時の時は
memset(enemy,0,sizeof(enemy_t)*ENEMY_MAX);//雑魚敵を消す
memset(shot,0,sizeof(shot_t)*SHOT_MAX);//弾幕を消す
boss.x=FMX/2;//ボスの初期座標
boss.y=-30;
if(stage_count==boss.appear_count[0])//最初なら
boss.knd=-1;//弾幕の種類
}
boss.phy.flag=1;
boss.phy.flag=1;
boss.s_flag=0;
boss.flag=1;
boss.hagoromo=0;//扇を広げるかどうかのフラグ
boss.endtime=99*60;//残り時間
boss.state=1;//待機中状態に
boss.cnt=0;
boss.graph_flag=0;//描画フラグを戻す
boss.knd++;
boss.wtime=0;//待機時間を初期化
input_phy(60);//60カウントかけて物理的計算で定位置に戻す
}
・弾幕関数内で、
boss.s_flag=1;
とする
________________________________________