ページ 1 / 1
ホーミング弾が敵をまっすぐ追いかけてくれない件
Posted: 2016年3月12日(土) 20:58
by 夢幻ノ月夜
レーザーの当たり判定の時に使った三点間の角度を返してくれる関数を使って
弾がそのまま直進した時に進むルートと敵に向かって直進した時に進むルートの
間の角度を求めてホーミングさせようとしています
現在のコードはこんな感じです
bsにはボス・enには敵のポインタが入っていて、ここには異常が無いことをデバッグモードで確認しています
どうして間の角度が正確に出ないのか教えてください
コード:
void HomingShot::Move(){
this->cnt++;
float A=0;
if(en!=NULL){
if(en->GetUsed()==FALSE)en=NULL;
}
if(bs!=NULL){
if(bs->GetUsed()==FALSE)bs=NULL;
}
if(bs!=NULL){
pt_t pt0={this->x,this->y};
pt_t pt1={this->x+cos(this->a)*this->sp,this->y+sin(this->a)*this->sp};
pt_t rpt={this->bs->GetX(),this->bs->GetY()};
A=Get_Sita(pt0,pt1,rpt);
this->a+=A;
}else if(en!=NULL){
pt_t pt0={this->x,this->y};
pt_t pt1={this->x+cos(this->a)*this->sp,this->y+sin(this->a)*this->sp};
pt_t rpt={this->en->GetX(),this->en->GetY()};
A=Get_Sita(pt0,pt1,rpt);
this->a+=A;
}else{
//this->UpDateEnemy();
}
this->x+=cos(this->a)*this->sp;
this->y+=sin(this->a)*this->sp;
if(cnt > 120)delete this;
}
Re: ホーミング弾が敵をまっすぐ追いかけてくれない件
Posted: 2016年3月12日(土) 21:05
by 夢幻ノ月夜
参考に現時点での軌道はこんな感じです
Get_Sitaの中はこんな感じになっています
コード:
float Get_Sita(pt_t pt0,pt_t pt1,pt_t rpt){
Vector_t c, p, q;
Vector_t cp;
Vector_t cq;
float s, t, theta;
c.x=pt0.x;
c.y=pt0.y;
p.x=pt1.x;
p.y=pt1.y;
q.x=rpt.x;
q.y=rpt.y;
Vector2Diff(&cp,&c,&p);
Vector2Diff(&cq,&c,&q);
s=Vector2OuterProduct(&cp,&cq);
t=Vector2InnerProduct(&cp,&cq);
theta=atan2(s, t);
return theta;
}
Re: ホーミング弾が敵をまっすぐ追いかけてくれない件
Posted: 2016年3月13日(日) 13:56
by プラム
夢幻ノ月夜 さんが書きました:レーザーの当たり判定の時に使った三点間の角度を返してくれる関数を使って
弾がそのまま直進した時に進むルートと敵に向かって直進した時に進むルートの
間の角度を求めてホーミングさせようとしています
「レーザーのあたり判定の地気に使った三点間の角度を返してくれる関数」という単語は、僕とあなたしかわからないと思います。
きっと龍神録プログラミングの館に出てきたGet_Sita()のことを言っているのだと思いますが。第三者もわかりやすい書き方でお願いします。
それで本題ですが。
HomingShotといクラスの中身はどうなってます?
「a」という変数と「A」という変数が何を示しているかがよくわからないのと、
「this->a+=A;」というのは角度にGet_Sita()で得た角度を足しているのだと思いますが、その画像や、LINEで見せてもらった動画からして、
角度を足しすぎているようにも見えます。
それとホーミング弾の初期化角度はどうなってます?
初期化角度によって方向があらぶったりすることがあるようです。
もう少しわかりやすく、詳しことを記述していただけるとありがたいです。
Re: ホーミング弾が敵をまっすぐ追いかけてくれない件
Posted: 2016年3月13日(日) 14:08
by 夢幻ノ月夜
ノウル さんが書きました:夢幻ノ月夜 さんが書きました:レーザーの当たり判定の時に使った三点間の角度を返してくれる関数を使って
弾がそのまま直進した時に進むルートと敵に向かって直進した時に進むルートの
間の角度を求めてホーミングさせようとしています
[/code]
「レーザーのあたり判定の地気に使った三点間の角度を返してくれる関数」という単語は、僕とあなたしかわからないと思います。
きっと龍神録プログラミングの館に出てきたGet_Sita()のことを言っているのだと思いますが。第三者もわかりやすい書き方でお願いします。
それで本題ですが。
HomingShotといクラスの中身はどうなってます?
「a」という変数と「A」という変数が何を示しているかがよくわからないのと、
「this->a+=A;」というのは角度にGet_Sita()で得た角度を足しているのだと思いますが、その画像や、LINEで見せてもらった動画からして、
角度を足しすぎているようにも見えます。
それとホーミング弾の初期化角度はどうなってます?
初期化角度によって方向があらぶったりすることがあるようです。
もう少しわかりやすく、詳しことを記述していただけるとありがたいです。
aはショットの角度です。
初期化角度は自機からすぐ近くに有るショットの角度が初期化角度でいいと思います
Re: ホーミング弾が敵をまっすぐ追いかけてくれない件
Posted: 2016年3月13日(日) 14:12
by 夢幻ノ月夜
少しいじってみたところもう少しそれっぽい動きはし始めましたが
敵を見失った弾のy座標の移動が0になってしまっているようです
コード:
virtual void Move(){
this->cnt++;
this->x+=cos(this->a)*this->sp;
this->y+=sin(this->a)*this->sp;
float A=0;
if(bs!=NULL){
if(bs->GetUsed()==FALSE){
bs=NULL;
}else{
pt_t pt0={this->x,this->y};
pt_t pt1={this->x+cos(this->a),this->y+sin(this->a)};
pt_t rpt={this->bs->GetX(),this->bs->GetY()};
A=Get_Sita(pt0,pt1,rpt);
}
}else if(en!=NULL){
if(en->GetUsed()==FALSE){
en=NULL;
}else{
pt_t pt0={this->x,this->y};
pt_t pt1={this->x+cos(this->a),this->y+sin(this->a)};
pt_t rpt={this->en->GetX(),this->en->GetY()};
A=Get_Sita(pt0,pt1,rpt);
}
}else{
this->UpDateEnemy();
this->sp+=0.01f;
}
this->a+=A;
if(cnt > 120)delete this;
}
Re: ホーミング弾が敵をまっすぐ追いかけてくれない件
Posted: 2016年3月13日(日) 14:24
by プラム
夢幻ノ月夜 さんが書きました:
aはショットの角度です。
初期化角度は自機からすぐ近くに有るショットの角度が初期化角度でいいと思います
夢幻ノ月夜 さんが書きました:少しいじってみたところもう少しそれっぽい動きはし始めましたが
y座標の移動が0になってしまっているようです
初期化角度はたぶんあってると思います(直接コードを見てないでわかりませんが)
あなたがどういう動きをさせたいかが良くわかりませんが。
など、適当な数で割ってみたらどうですか?
というか、「まっすぐ飛んでくれない件」と言っているので、わざわざそんなにめんどくさい飛ばし方をしなくても、
atan2で角度を求めてその方向に角度をセットして飛ばせばまっすぐ飛ぶので、それでいいんじゃないですかね?
Re: ホーミング弾が敵をまっすぐ追いかけてくれない件
Posted: 2016年3月13日(日) 17:26
by 夢幻ノ月夜
ノウル さんが書きました:夢幻ノ月夜 さんが書きました:
aはショットの角度です。
初期化角度は自機からすぐ近くに有るショットの角度が初期化角度でいいと思います
夢幻ノ月夜 さんが書きました:少しいじってみたところもう少しそれっぽい動きはし始めましたが
y座標の移動が0になってしまっているようです
初期化角度はたぶんあってると思います(直接コードを見てないでわかりませんが)
あなたがどういう動きをさせたいかが良くわかりませんが。
など、適当な数で割ってみたらどうですか?
というか、「まっすぐ飛んでくれない件」と言っているので、わざわざそんなにめんどくさい飛ばし方をしなくても、
atan2で角度を求めてその方向に角度をセットして飛ばせばまっすぐ飛ぶので、それでいいんじゃないですかね?
ベクトルの長さ揃えたらうまくいきました
Re: ホーミング弾が敵をまっすぐ追いかけてくれない件
Posted: 2016年3月14日(月) 09:28
by usao
オフトピック
むしろ画像の弾の軌跡がすてきだと思うので,
何がどういう原因でそういう動きになったのかもう少し詳述いただきたい…
Re: ホーミング弾が敵をまっすぐ追いかけてくれない件
Posted: 2016年3月14日(月) 16:00
by プラム
usaoさん>>僕もあの演出で、あれを「仕様」という事でいいと思います()
Re: ホーミング弾が敵をまっすぐ追いかけてくれない件
Posted: 2016年3月14日(月) 16:40
by usao
オフトピック
>僕もあの演出で、あれを「仕様」という事でいいと思います()
最終的に的には当たってるようだし,
なんというか,色と軌跡の具合がマッチしてる感みたいなのがある.