2012-06-16 33 views
12

身体が他の身体に衝突したが、この衝突で反応しないかどうかを検出する方法。どのように衝突を検出するが、box2dで衝突しない?

デフォルト i - 衝突とボディの衝突を検出します。

私がfixtureDefフィルタを設定した場合、ボディは衝突しませんが、衝突は検出できません。

お願いします!

+3

センサの詳細については、http://boxbox.org/manual.htmlを参照してください。 – Cyclonecode

答えて

18

フィクスチャーが何かに衝突する必要がなければ、センサーにすることができます。何かと衝突する必要があるが、他のものと衝突しないようにするには、衝突した内容に応じて衝突リスナーのPreSolveでContact-> SetEnabled(false)を実行することができます。

+0

補足:PreSolveを使用する代わりに、衝突マスクや衝突グループを使用して、治具は衝突すべきで、衝突してはならない。 – Thomas

+0

彼はまだ衝突が発生したときにそれを検出したいと思っています。衝突マスクを変更すると、衝突検出が完全に防止されます。 – iforce2d

+0

真。これは、センサ取付具と組み合わせる必要があります。 – Thomas

8

ここで必要なのは、本体上のセンサー固定具です。

時にはゲームロジックが2つのフィクスチャが重なっているときにコリジョン応答がないことを知る必要があることがあります。これはセンサーを使用して行われます。センサーは、衝突を検出するが、応答を生成しないフィクスチャーです。

任意の据え付け品にセンサとしてフラグを付けることができます。センサは静的でも動的でもよい。あなたは身体ごとに複数の器具を用意しているかもしれないことを覚えておいてください。センサーとソリッド・フィクスチャを自由に組み合わせることができます。

センサーは接点を生成しません。あなたがセンサーとしての固定具を設定し、書き込むことができます

  1. b2Contact :: IsTouching
  2. b2ContactListener :: BeginContactとEndContact:センサの状態を取得するには、2つの方法があります。それをあなたのコンタクトリスナーに送ります。フィクスチャーのセンサフラグがtrueに設定されている場合、物理的に衝突をシミュレートすることなく衝突データを提供します(つまり、他の衝突するフィクスチャとのオーバーラップをテストできます)。

    これは、センサーを使用して開始するにはRay Wenderlich sensor tutorial