2012-04-27 17 views
1

衝突検出のトピックを検索しましたが、すべて検出自体に関するものでした。私の質問は、検出プロセスの前後についてです。私は最初の大きなゲームを書いており、合理的に可能な限り効率的にしたいと思っています。衝突検出をセットアップしてから2Dゲームで衝突を処理する

ゲームの前提は、あなたが競技場の周りを船で飛ぶことです。この分野では、環境、敵の船、飛行機を飛行し、宇宙の周りに浮かぶことによって提供される様々な性質の障害になるでしょう。オブジェクトは、それらが必要とされる場合、またはそのようにしたい場合、そのセンターの周りを回転することができます。

テストを設定する私の考えは、オブジェクトをある方法でキューとリストにロードさせることです。その後、ゲームはキューの前面にあるものをすべて取り出し、リスト内のすべてに対してテストします。まず、リスト内のものがそれ自身ではないことを確認します(これは、常にすべてのものの衝突を生成します)。次に、ゲームは、キュー内のオブジェクトとリスト内のオブジェクトとの間に衝突があるかどうかをチェックします。衝突がある場合、衝突したオブジェクトにフラグを立てて、オブジェクトが衝突した参照または何かを保存します。

たとえば、AがBに衝突した場合、ゲームはAに衝突関数を実行し、Bに衝突関数を実行し、AにはBへの参照を格納し、BにはAへの参照を格納します。

ゲームはキューを通過するまでキュー内のオブジェクトの衝突をチェックし、複数のオブジェクトがヒットしたりヒットしたりするたびに上記の処理を繰り返します。

たとえば、A、B、Cの3つのボールがあり、Aが同じフレームでBとCの両方に当たった場合、Aの速度はB、Cの順に変更されます。 BとCの速度はAで変更されます。

これを実行するのは賢明な方法でしょうか?現在の衝突の実際の検出については心配していません。問題を解決するために自分自身で考えている記事やチュートリアルがたくさんあります。私は前と後のことを話すことは何もしていない。待ち行列とリスト内のどれくらいのものが大きな負荷を引き起こし始め、ゲームを遅くするか分かりません。今、私のオブジェクトはすべてx、yの位置、x、yの速度、どの方向に向いているのか、その他いくつかのものです。

今、私は無関係なものについてはじまり始めていると思います。どんな洞察力や知恵も高く評価されます。

+0

キューを通過する際に移動ベクトルが更新されますか? BとCの動きベクトルがA _after_ Aによって変更されているように見えますが、動きベクトルが変更されています。 –

+0

これは、古い値と新しい値を保存し、検出プロセスを実行し、必要に応じてすべてのオブジェクトを更新します。この例では、AはBと相互作用し、Aは新しい速度を保存します。その後、それはCと相互作用し、さらに新しい速度を修正して保存する。その後、ゲームが検出を終了すると、新しい速度を使用するオブジェクトを更新するプロセスが実行されます。 – Azaral

+0

はい、Cの新しい速度を計算しているときにCのAの新しい速度を使用しませんか?私が考えることができる最も簡単な衝突応答を仮定すると、Aは速度(0,1)を開始し、Cは(0、-1)を持ち、Bも(0、-1)を持ち、AはB同じフレームでは、まずBで修正され、Aの速度(0、-1)が与えられてからCと衝突しますが、同じ速度ベクトルを持つため変更もありません。または、新しい速度が新しいリストに保存され、すべての計算が完了した後にリストがスワップされるということを意味しましたか? –

答えて

2

多くのゲーム開発のトピックについては、このへの一般的な答えはありません、それはゲームのあなたのタイプによって異なりますが、それはあなたのオブジェクトのトラバーサルに来るとき心の中でいくつかのことを保つ:

  • てみてください衝突検出後の実際の反応(ダブルディスパッチ、ビジター、ダウンキャスト/ rtti、関数マップで使用できる特性の保存など)をどのように行うのかを考えてください。複数のテクニックがあり、すべてに長所と短所があります。選択したメソッドは、実際のトラバーサルの仕方を反映することができます。
  • オブジェクトの種類でシーンを分割してみてください。たとえば、決して動かない静的オブジェクトがたくさんある場合、それらをすべて互いにテストするのはばかげているので、これらを分離する必要があります。しかし、経験則として、これをあまりにも専門化しようとしないでください。staticdynamicのようなものは、おそらく大きな利益をもたらします。
  • これは、オクルージョンメカニズムに関連している可能性があります。たとえば、ポータルベースの場合、異なるセルのオブジェクトが衝突することはほとんどありません。

これは複雑なトピックですが、私が今忘れているヒントがいくつかあります。

+0

これらのことのいくつかについては、良いチュートリアルへのリンクがあります。私は物事を読んで、それが起こっているのを見て、それを説明するだけで、物事を勉強しようとするのが最も難しい時を過ごしています。 – Azaral

+0

@Azaral:私が衝突の検出について知っていることのほとんどは、経験や読書スタンドアロンの記事からのものです。本やチュートリアルは本当におすすめできません。 – KillianDS

+0

どうもありがとうございます。 – Azaral