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

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

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

#1

投稿記事 by くろのま » 6ヶ月前

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

コード:

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);

              }

}

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

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

#2

投稿記事 by あたっしゅ » 6ヶ月前

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

中の人:
手提鞄あたっしゅ、[MrAtassyu]
http://ameblo.jp/mratassyu/
Pixiv: 666303
手提鞄屋魚有店(てさげかばんやうおありてん)

くろのま
記事: 10
登録日時: 6ヶ月前

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

#3

投稿記事 by くろのま » 6ヶ月前

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

コード:


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
記事: 1635
登録日時: 7年前

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

#4

投稿記事 by usao » 6ヶ月前

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

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

くろのま
記事: 10
登録日時: 6ヶ月前

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

#5

投稿記事 by くろのま » 6ヶ月前

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

返信

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