wie man die physikalische Kollision einiger Objekte in box2d ignoriert


8

Ich weiß, das klingt albern, aber ich möchte, dass einige Objekte der Physik folgen, während andere nicht miteinander kollidieren.

Ich habe versucht, sie zu erreichen, indem ich ausschließlich ihre Position festgelegt habe. Aber dann wird die gesamte Physik ignoriert.

Ist das, was ich versuche, überhaupt möglich?


Ich bin mir nicht sicher, was Sie erreichen wollen, aber auch kinematische Körper könnten helfen.
ThatOneGuy

Antworten:


11

Informationen zur Kollisionsfilterung finden Sie im Box2D-Handbuch:

Mit der Kollisionsfilterung können Sie Kollisionen zwischen Scheinwerfern verhindern. Angenommen, Sie erstellen einen Charakter, der Fahrrad fährt. Sie möchten, dass das Fahrrad mit dem Gelände kollidiert und der Charakter mit dem Gelände kollidiert, aber Sie möchten nicht, dass der Charakter mit dem Fahrrad kollidiert (weil sie sich überlappen müssen). Box2D unterstützt eine solche Kollisionsfilterung anhand von Kategorien und Gruppen.

Box2D unterstützt 16 Kollisionskategorien. Für jedes Gerät können Sie angeben, zu welcher Kategorie es gehört. Sie geben auch an, mit welchen anderen Kategorien dieses Gerät kollidieren kann. Zum Beispiel könnten Sie in einem Multiplayer-Spiel festlegen, dass nicht alle Spieler miteinander kollidieren und Monster nicht miteinander kollidieren, aber Spieler und Monster sollten kollidieren

Link zum Handbuch hier . (Suche nach Filterung).


2

Wenn Sie zwei Arten von Objekten haben, die nicht mit anderen kollidieren sollen, funktioniert Folgendes.

var kindA = -1;
var kindB = -2;

var bodyDef = new b2BodyDef();
var body = world.CreateBody(bodyDef);
var fixtureDef = new b2FixtureDef();
fixtureDef.shape = new b2Shape();
fixtureDef.filter.groupIndex =
    entity instanceof EntityA
        ? kindA
        : kindB;
body.CreateFixture(fixture);
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.