как игнорировать физику столкновения некоторых объектов в box2d

8

Я знаю, это звучит глупо, но я бы хотел, чтобы некоторые объекты следовали физике, а другие не сталкивались друг с другом.

Я пытался достичь их, устанавливая их положение исключительно. Но тогда он будет игнорировать всю физику.

Возможно ли то, что я пытаюсь сделать?

Тае Сунг Шин
источник
Я не уверен, чего вы хотите достичь, но кинематические тела также могут помочь.
ThatOneGuy

Ответы:

11

Читайте о фильтрации столкновений в руководстве Box2D:

Фильтрация столкновений позволяет предотвратить столкновения между приборами. Например, скажем, вы делаете персонаж, который ездит на велосипеде. Вы хотите, чтобы велосипед сталкивался с местностью, а персонаж - с местностью, но вы не хотите, чтобы персонаж сталкивался с велосипедом (потому что они должны перекрываться). Box2D поддерживает такую ​​фильтрацию столкновений, используя категории и группы.

Box2D поддерживает 16 категорий столкновений. Для каждого прибора вы можете указать, к какой категории он относится. Вы также указываете, с какими другими категориями может сталкиваться этот прибор. Например, вы можете указать в многопользовательской игре, что все игроки не сталкиваются друг с другом и монстры не сталкиваются друг с другом, но игроки и монстры должны сталкиваться

Ссылка на руководство здесь . (Поиск по фильтрации).

jgallant
источник
2

Если у вас есть два типа объектов, которые не должны сталкиваться с другим, то работает следующее.

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);
Мэтью Джеймс Дэвис
источник