Используйте прослушиватель контактов между телами, у которых есть фильтр в LibGDX box2D - PullRequest
0 голосов
/ 18 апреля 2019

Я использую libGDX с box2D, и у меня есть два тела, которые имеют фильтрацию столкновений, поэтому они не могут сталкиваться друг с другом.

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

Но я хочу обнаружить столкновение тела со слушателем контактов, даже если они не могут столкнуться друг с другом.

Есть ли способ сделать это?.

Я не ставил код, потому что это вопрос, и я подумал, что нет необходимости, по крайней мере, на данный момент ...

Если вы можете мне помочь, спасибо!

1 Ответ

1 голос
/ 19 апреля 2019

Использовать контакт setEnabled метод.

В ContactListener:

@Override // In preSolve method. Not beginContact, it matters
public void preSolve(Contact contact, Manifold manifold) {
       short firstBit = contact.getFixtureA().getFilterData().categoryBits;
       short secondBit = contact.getFixtureB().getFilterData().categoryBits;

       if ((firstBit | secondBit) == (BOX_BIT | GROUND_BIT)) {
            System.out.println("Contact " + firstBit + " " + secondBit);
            contact.setEnabled(false);
       }
  }

Эти биты BOX_BIT и GROUND_BIT - это биты ваших тел, которые не должны сталкиваться, но ContactListener перехватит контакт между ними, установите его следующим образом:

fixturedef.filter.categoryBits = GROUND_BIT;

Установите другой бит для тел, чтобы они сталкивались

Надежда помогает.

...