ページ 11

自機ボムと敵弾の当たり判定が重いです

Posted: 2010年4月17日(土) 14:19
by サイホーン
こちらが以前のスレッドです。http://www.play21.jp/board/formz.cgi?ac ... &rln=50798

三角関数テーブル化の前にボトルネックを調べてみたところ


どうやら、ボムで敵弾を消す時にすごく重くなることが分かり
それ以外はどんなに弾が飛んでいても重くなりませんでした。

なので、ボトルネックはボムと敵弾の当たり判定だとわかりました。
それにボムで消した時の弾消去エフェクトをコメントにして消しても重かったので
やはり、ボトルネックはボムと敵弾の当たり判定の処理です。


当たり判定は二次元配列で軽くできるとここの過去ログのPSP移植関係で
見たことがありますが、
実際はどのように軽くできるでしょうか?

敵弾の最大値を3000にしています。


環境はwinXP、VC++2008EE,DXライブラリです。

Re:自機ボムと敵弾の当たり判定が重いです

Posted: 2010年4月17日(土) 16:26
by Ma
>どうやら、ボムで敵弾を消す時にすごく重くなることが分かり
>それ以外はどんなに弾が飛んでいても重くなりませんでした。

>なので、ボトルネックはボムと敵弾の当たり判定だとわかりました。


消すとき=あたり判定するとき?
まったくよくわからない論理ですが、


>当たり判定は二次元配列で軽くできるとここの過去ログのPSP移植関係で
見たことがありますが、

ちょっと私はみたことないので的外れな解答かもしれませんが、
現状、どのようにあたり判定していて、判定のどこがネックになっていると思われるか推測できませんか?

私の場合、高速化するならできるだけ円形の当たり判定にします。
正直、私はこれ以上効率のいいあたり判定の仕方がわかりません。

Re:自機ボムと敵弾の当たり判定が重いです

Posted: 2010年4月17日(土) 17:37
by softya
速度の計測は、Releaseビルドでされていますか?まずそこを確認してくだせい。
>どうやら、ボムで敵弾を消す時にすごく重くなることが分かり
>それ以外はどんなに弾が飛んでいても重くなりませんでした。
ボムの当たり判定を常に当たりにしたら早くなりますか?必ず確認してください。
これで、当たり判定は高速化されますので、これで重かったら弾の消滅エフェクトが原因となります。

で、どうしても遅い場合ですが、当たり判定の場合は出来るだけ当たり判定回数を減らすしかありません。式でどう工夫しても、Maさんの言われている円形の当たり判定の以上の工夫ができないですね。
あとは、弾をブロック分けして弾のブロック単位で当たり判定してからここの弾の当たり判定を設けるとか(逆に遅くなる可能もあり)。あとはプログラムを見てみないとなんとも言えません。

Re:自機ボムと敵弾の当たり判定が重いです

Posted: 2010年4月17日(土) 19:05
by サイホーン
>高速化するならできるだけ円形の当たり判定にします。
はい、自分も円形の当たり判定にしています。
円形が一番軽いんですか…知らなかったです。

>ボムの当たり判定を常に当たりにしたら早くなりますか?
ちょっと難しかったので
とにかく、当たり判定を評価する部分をコメントにしてみたところ
重くなりませんでした。どうやら当たり判定部分です。

それでいろいろとMaさんとsoftyaさんの貴重な御意見を
参考にして
当たり判定回数を減らしてみましたら、全く重たくなくなりました。

具体的には
ボムと敵弾の当たり判定を評価する回数をcount%3==0
というように3カウントに1度にし、さらに
Releaseビルドしてやってみると、
全く重たくなくなりました。

まさかこんなに軽くなるとは思いませんでした。
お二人には重ね重ね本当に感謝しています。

ありがとうございました。