2012-06-16 9 views
12

Wie erkennt man, wenn ein Körper auf einen anderen Körper stößt, aber nicht auf diese Kollision reagiert?Wie erkennt man eine Kollision, kollidiert aber nicht in box2d?

Von Standard ich - erkennen, Kollision und Körper kollidieren.

Wenn ich FixtureDef Filter - Körper nicht kollidieren, aber ich kann keine Kollision erkennen.

Hilfe bitte!

+3

Versuchen Sie, mehr über Sensoren lesen http://www.box2d.org/manual.html – Cyclonecode

Antwort

18

Wenn das Gerät nie mit irgendwas kollidieren muss, kann man es zum Sensor machen. Wenn Sie es mit einigen Dingen kollidieren müssen, aber nicht mit anderen, können Sie contact-> SetEnabled (false) in der PreSolve des Kollisions-Listeners durchführen, je nachdem, womit es kollidiert ist.

+0

Addendum: statt PreSolve verwenden, können Sie auch Kollisionsmasken und/oder Kollisionsgruppen verwenden, um zu steuern, was Leuchte sollte und sollte nicht kollidieren. – Thomas

+0

Er möchte immer noch erkennen, wenn eine Kollision auftritt, er will einfach keine Kollisionsreaktion. Durch Ändern der Kollisionsmaske wird die Kollisionserkennung vollständig verhindert. – iforce2d

+0

Wahr. Dies muss mit Sensorhalterungen kombiniert werden. – Thomas

8

Was Sie hier wollen, ist eine Sensorhalterung an einem Körper. Aus dem box2d-Handbuch:

Manchmal muss die Spiellogik wissen, wann sich zwei Fixtures überschneiden, aber es sollte keine Kollisionsreaktion geben. Dies geschieht mithilfe von Sensoren. Ein Sensor ist eine Vorrichtung, die eine Kollision erkennt, jedoch keine Reaktion erzeugt.

Sie können jedes Gerät als Sensor kennzeichnen. Sensoren können statisch oder dynamisch sein. Denken Sie daran, dass Sie möglicherweise mehrere Fixtures pro Körper haben und dass Sie eine Mischung aus Sensoren und festen Fixtures haben können.

Sensoren generieren keine Kontaktpunkte. Es gibt zwei Möglichkeiten, um den Zustand eines Sensors zu erhalten:

  1. b2Contact :: IsTouching
  2. b2ContactListener :: BeginContact und EndContact

Sie können einstellen, eine Halterung als Sensor und dann schreiben es in Ihren Kontakt Listener. Wenn für ein Fixture das Sensor-Flag auf true gesetzt ist, liefert es Kollisionsdaten, ohne die Kollision physikalisch zu simulieren (dh, es kann mit anderen kollidierenden Fixtures überlappen).

Dies ist ein hilfreiches Tutorial zum Thema Verwenden Sie die Sensoren Ray Wenderlich sensor tutorial

Verwandte Themen