敵の弾がだんだん遅くなります。。。

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
クロウ

敵の弾がだんだん遅くなります。。。

#1

投稿記事 by クロウ » 16年前

外部データで敵の出現をコントロールできるようになりましたが、今度は
「敵の数で弾の速度が変わる」という現象が起きています。
この弾の速度は敵の数が多いと弾の移動速度が速くなり、敵の数が減るに従って、fpsとは関係なく速度が遅くなってしまいます。

いろいろ探ってみましたが、原因不明で何が悪いのかわかりませんでした。

どこが悪いのか、どうすれば直るのかアドバイスをお願いします。


実際に挙動がどうなっているのか見てほしいのでプロジェクトごと挙げておきました。

http://down11.ddo.jp/uploader/download/ ... ip/attatch
パスワードはcrowです。

ソースファイルの内容は以下のようになっています
*mymain.cpp:ゲームのメイン部分
*myhelper.cpp:めんどくさい計算をする関数が書いてある部分
*enemyMain.cpp:敵の行動をまとめる部分
*enemy_1~4.cpp:それぞれの敵の行動が書いてある部分
(1:動かないで一直線の弾を吐く、2:未実装、3:全方位弾を吐くボス、4:プレイヤーに向かって弾を吐く敵)

Justy

Re:敵の弾がだんだん遅くなります。。。

#2

投稿記事 by Justy » 16年前

[color=#d0b0c0" face="monospace]
>敵の数が減るに従って、fpsとは関係なく速度が遅くなってしまいます
[/color]

 DrawBullet_X系の関数ってそれぞれが全ての弾の移動と表示を担当していると
思うのですが、この関数呼ばれすぎ、もしくは処理が不足しているのではないでしょうか?

 本来は1フレームに1回だけ移動と描画を行うようになっているのが普通ですが、
今の構造ですと、敵の数分だけこれらの関数が呼ばれているような気がします。

 例えば、1と4のパターンの敵の2匹だけがいて g_ebullets[0].usedが TRUEのとき、
g_ebullets[0].bpos.positionは1フレームに DrawBullet_1と DrawBullet_4の2回で
移動が行われる、というふうに。


 つまり敵がいればいるほど、全ての弾における移動と描画を繰り返すことになるので、
移動速度も速くなり(目に見えないけど描画負荷も上がっている)と思われます。

 敵が減れば1フレームの移動が回数が減るので、遅くなる……というより
本来指定した通りの移動速度に戻っているのではないでしょうか。

クロウ

Re:敵の弾がだんだん遅くなります。。。

#3

投稿記事 by クロウ » 16年前

>Justyさん
つまり、敵が多いときが異常であって、敵が減ってくるに従って正常な挙動に戻っていくということですか?

・・・ということは、弾の構造体にどのタイプの敵から発射したかというインデックスを付けてそれぞれのDrawBullet_Xではそのインデックスが付いているモノのみを処理するようにすればいいのかなぁ・・・・。

アドバイスを参考に修正してみます。

クロウ

Re:敵の弾がだんだん遅くなります。。。

#4

投稿記事 by クロウ » 16年前

うまく修正できました。
ありがとうございました。

やはり、関数を呼んでいる場所が問題だったようです。

閉鎖

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