DXライブラリ ホーミングがうまくできない

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
くろのま
記事: 10
登録日時: 3年前

DXライブラリ ホーミングがうまくできない

#1

投稿記事 by くろのま » 3年前

前のトピックが終わったばかりで申し訳ないのですが、分からないところがあったので質問します。
敵がホーミング弾を撃ってくるようにしたいのですが、全然違う方向に撃ってきます。色々なサイトを参考にしましたが、頭がこんがらがってしまいました。このまま自分で考えていても埒があかないと思うので、教えて欲しいです。

コード:

for (j = 6; j < ENEMY; j++) {                         //敵の弾の座標を格納(ホーミング)

              if (EbulletCounter[j] == 60) {

                               if (enemySFlag[j] == 0) {


 

                            enemyB_x[j] = enemy_x[j];

                            enemyB_y[j] = enemy_y[j] + 15;


 

                            angle = atan2((double)enemy_y[j] - playerplase_y, (double)enemy_x[j] - playerplase_x);

                           

                            enemySFlag[j] = 1;

                            EbulletCounter[j] = 0;

                            break;

                                 }

                  }

}


 


 

for (j = 6; j < ENEMY; j++) {

              if (enemySFlag[j] == 1) {


 

                            enemyB_x[j] += sin(angle)*3.0;

                            enemyB_y[j] += cos(angle)*3.0;


 

                                         if (enemyB_y[j] + 32 > 480 || enemyB_y[j] + 32 < 0 || enemyB_x[j] + 24 > 640 || enemyB_x[j] + 24 < 0) {

                                                      enemySFlag[j] = 0;

                                          }

                                          DrawTurnGraph(enemyB_x[j], enemyB_y[j], enemyBullet, FALSE);

              }

}

アバター
あたっしゅ
記事: 664
登録日時: 13年前
住所: 東京23区
連絡を取る:

Re: DXライブラリ ホーミングがうまくできない

#2

投稿記事 by あたっしゅ » 3年前

ぱっと見で。
enemyB_x[j] とかは配列使ってるのに、angle は配列使ってないですよね。
angle が、すべての弾に共通なのは、おかしいのでは ?
VTuber:
東上☆海美☆(とうじょう・うみみ)
http://atassyu.php.xdomain.jp/vtuber/index.html
レスがついていないものを優先して、レスするみみ。時々、見当外れなレスしみみ。

中の人:
手提鞄あたッしュ、[MrAtassyu] 手提鞄屋魚有店
http://ameblo.jp/mratassyu/
Pixiv: 666303
Windows, Mac, Linux, Haiku, Raspbery Pi, Jetson Nano, 電子ブロック 持ち。

くろのま
記事: 10
登録日時: 3年前

Re: DXライブラリ ホーミングがうまくできない

#3

投稿記事 by くろのま » 3年前

下のように変更したら、何となく(本当に何となく)ホーミングしてくれるようになりましたが、精度が低いです。自機が画面の真ん中当たりにあるときはちゃんと弾が自機の方向に飛んでいくのですが、画面の上か下に自機があるときは自機からずれてしまいます。

コード:


for (j = 6; j < ENEMY; j++) {                         //敵の弾の座標を格納(ホーミング)

              if (EbulletCounter[j] == 60) {

                            if (enemySFlag[j] == 0) {


 

                                          enemyB_x[j] = enemy_x[j];

                                          enemyB_y[j] = enemy_y[j] + 15;


 

                                          angle[j] = atan2((double)enemy_y[j] - playerplase_y, (double)enemy_x[j] - playerplase_x);

                                          enemySFlag[j] = 1;

                                          EbulletCounter[j] = 0;

                                          break;

                            }

              }

}


 


 

for (j = 6; j < ENEMY; j++) {

              if (enemySFlag[j] == 1) {


 

                            enemyB_x[j] -= cos(angle[j])*5.0;

                            enemyB_y[j] -= sin(angle[j])*5.0;


 

                                          if (enemyB_y[j] + 24 > 480 || enemyB_y[j] + 24 < 0 || enemyB_x[j] + 32 > 640 || enemyB_x[j] + 32 < 0) {

                                                        enemySFlag[j] = 0;

                                          }

                                          DrawTurnGraph(enemyB_x[j], enemyB_y[j], enemyBullet, FALSE);

              }

}
 

アバター
usao
記事: 1887
登録日時: 11年前

Re: DXライブラリ ホーミングがうまくできない

#4

投稿記事 by usao » 3年前

座標系が謎だなぁ…
sinとcosは本当にそれで合ってるのだろうか?(x側がcosとかいう話はない?)

あと angle は最初だけ計算して,あとはずっとそれを使う(弾は発射後ずっと同じ方向に進む)ように見えるけど,それで合っている?
(「ホーミング」って言葉からは違うものを想像するけど)

くろのま
記事: 10
登録日時: 3年前

Re: DXライブラリ ホーミングがうまくできない

#5

投稿記事 by くろのま » 3年前

すみません、自分がやりたいことを調べてみたらホーミングではなく自機狙いでした。自機狙いはまあまあできているのですが、(画面の上下に自機を移動させると自機狙いの弾が届かないことを除いて)自機狙いをする敵にある程度近づくと弾を撃ってこなくなります。とりあえずこれを解決したいです。

返信

“C言語何でも質問掲示板” へ戻る