0

そのため、マップの端から跳ね返りたい円(つまり長方形)がいくつかありますが、それらは互いに跳ね返ってはなりません。

問題は、私はまだ円と円の衝突をキャプチャし、そのようなイベントでいくつかのタスクを実行する必要があるということです。

誰かが私に進むべき方向を教えてもらえますか?

明確にするために:

私はlibGDXとBox2Dを使用しています。円はDynamicBodiesです。マップの中央にいくつかの静止体が存在する可能性があり、それらの円も通常は衝突します(それらから跳ね返ります)。

私が試したのは、連絡の開始時に両方のサークルの復元を0に設定し、連絡の終了時に復元を復元することです(私のContactListenerサブクラスで)。また、一時的にサークルをセンサーに設定してみました。しかし、なぜそれが機能しなかったのかわかりません。

4

3 に答える 3

3

円にフィルターを設定して、それらがマップの端と衝突するようにすることができますが、それら自体とは衝突しません。これを行う方法は、box2dマニュアルhttp://www.box2d.org/manual.htmlの「フィルタリング」セクションで読むことができます。

円と円の衝突をキャプチャするには、次の操作を実行できます。

  1. 各ワールドステップで、サークルを1つずつ進めます。
  2. ある円を見るとき、それがAABBであることによってAABBクエリを作成します。AABBクエリとは何ですか?「AABBクエリ」セクションのbox2dマニュアルを参照する方法。サークルのAABBを取得するには、b2Fixture::GetAABBを呼び出します。
  3. AABBクエリの後、サークルと衝突している可能性のある器具の数を取得します。特定のテストを行うには、b2TestOverlap関数を使用するか、中心間の距離を単純に計算します。

幸運を!

于 2012-07-29T10:18:05.137 に答える
0

高レベルの観点から、アプリケーションロジックでそのようなものをプログラムします。

マップからのバウンスは、いくつかのif条件を使用して行われます。たとえば、円の中心のx値から半径を引いた値がマップのxコンポーネントよりも小さいかどうかを確認します。この場合、円移動ベクトルのx方向を反転します。

2つの円の衝突検出は、両方の中心間の接続ベクトルの長さを両方の半径の合計と比較するだけです。それが小さいか等しい場合、それらは互いに交差しています。

編集:ああ、すみません、あなたが何らかの物理学ライブラリを使用しているのを見ませんでした。私はlibgdxを使用していませんが、他のフレームワークでは、どのオブジェクトが互いに衝突できるかを指定する衝突グループを定義し、それに応じてこれらのグループ内のオブジェクトの衝突を処理できます。おそらくlibgdxも同様の概念を提供していますか?

于 2012-07-24T22:25:35.650 に答える
0

iforce2dのコメントのおかげで、次のスレッドで適切な答えを見つけることができました:衝突を検出するが、box2dで衝突しない方法は?

質問のように:私は衝突イベントに反応したかったのですが、同時に円が互いに衝突しないようにしました。したがって、センサーは答えではなく、体の物理的属性も変更しました。適切な答えは、 CollisionListenerのpreSolveメソッド( contact.setEnabled (false))で連絡を無効にすることでした。そのような単純な。

于 2012-07-31T18:13:32.630 に答える