本編のオプションのホーミング弾の誘導について
Posted: 2010年11月17日(水) 13:57
//一番近い敵を探して角度をセットする
void calc_homing(int k){
int i,d, num=-1, min=-1;
double x,y;
if(boss.flag==0){//ボスが居ない時
for(i=0;i<ENEMY_MAX;i++){//敵の総数分
if(enemy.flag==1){
x=(enemy.x-cshot[k].x);
y=(enemy.y-cshot[k].y);
d=(int)(x*x+y*y);//ショットと敵の距離
if(d<min || min==-1){//計算結果が最小値かまだ格納していないなら
num=i;//番号記録
min=d;//距離記録
}
}
}
}
//近い敵が見つかったら、あるいはボスがいて、HPがあるときは角度をセット
if(num!=-1 || boss.flag==1 && boss.hp>0){
if(boss.flag==0){
x=enemy[num].x-cshot[k].x;
y=enemy[num].y-cshot[k].y;
}
else{
x=boss.x-cshot[k].x;
y=boss.y-cshot[k].y;
}
cshot[k].angle=atan2(y,x);
}
}
本編のcshot.cからコピーしたものです。
このプログラムだと、たとえばボスがx=0,y=0にいて、弾の発射位置がx=1,y=1で
弾の発射方向(angle)が-y方向にしかないとしても、直線状にホーミングしてしまいます。
これを、なめらかに、例ていうと扇状に誘導していき、ボスのy軸を下回ったら
誘導を停止するというプログラムにするにはどうしたらいいのでしょうか?
else{
x=boss.x-cshot[k].x;
y=boss.y-cshot[k].y;
}
の部分でいろいろ試しましたが、できませんでした。
①必ずあたらなくてもいいです。一定の湾曲値で敵の方向に弾が曲がり、既存の角度になったら直線に飛んでいくというプログラム
②自分からみて真横に発射された弾が、発射された時のボスの位置に円状に綺麗に曲がる誘導弾
②は後学のためだけですが、もしよろしければ教えてもらえないでしょうか?
void calc_homing(int k){
int i,d, num=-1, min=-1;
double x,y;
if(boss.flag==0){//ボスが居ない時
for(i=0;i<ENEMY_MAX;i++){//敵の総数分
if(enemy.flag==1){
x=(enemy.x-cshot[k].x);
y=(enemy.y-cshot[k].y);
d=(int)(x*x+y*y);//ショットと敵の距離
if(d<min || min==-1){//計算結果が最小値かまだ格納していないなら
num=i;//番号記録
min=d;//距離記録
}
}
}
}
//近い敵が見つかったら、あるいはボスがいて、HPがあるときは角度をセット
if(num!=-1 || boss.flag==1 && boss.hp>0){
if(boss.flag==0){
x=enemy[num].x-cshot[k].x;
y=enemy[num].y-cshot[k].y;
}
else{
x=boss.x-cshot[k].x;
y=boss.y-cshot[k].y;
}
cshot[k].angle=atan2(y,x);
}
}
本編のcshot.cからコピーしたものです。
このプログラムだと、たとえばボスがx=0,y=0にいて、弾の発射位置がx=1,y=1で
弾の発射方向(angle)が-y方向にしかないとしても、直線状にホーミングしてしまいます。
これを、なめらかに、例ていうと扇状に誘導していき、ボスのy軸を下回ったら
誘導を停止するというプログラムにするにはどうしたらいいのでしょうか?
else{
x=boss.x-cshot[k].x;
y=boss.y-cshot[k].y;
}
の部分でいろいろ試しましたが、できませんでした。
①必ずあたらなくてもいいです。一定の湾曲値で敵の方向に弾が曲がり、既存の角度になったら直線に飛んでいくというプログラム
②自分からみて真横に発射された弾が、発射された時のボスの位置に円状に綺麗に曲がる誘導弾
②は後学のためだけですが、もしよろしければ教えてもらえないでしょうか?