Cómo ignorar la colisión física de algunos objetos en box2d

8

Sé que esto suena tonto, pero me gustaría que algunos objetos siguieran la física, mientras que otros no chocaran entre sí.

Traté de lograrlos estableciendo su posición exclusivamente. Pero luego ignorará toda la física.

¿Es posible lo que estoy tratando de hacer?

Tae-Sung Shin
fuente
No estoy seguro de lo que quiere lograr, pero los cuerpos cinemáticos también podrían ayudar.
ThatOneGuy

Respuestas:

11

Lea sobre el filtro de colisión en el manual de Box2D:

El filtro de colisión le permite evitar la colisión entre dispositivos. Por ejemplo, digamos que haces un personaje que monta una bicicleta. Desea que la bicicleta choque con el terreno y que el personaje choque con el terreno, pero no desea que el personaje choque con la bicicleta (porque deben superponerse). Box2D admite dicho filtrado de colisión utilizando categorías y grupos.

Box2D admite 16 categorías de colisión. Para cada dispositivo puede especificar a qué categoría pertenece. También especifica con qué otras categorías puede colisionar este dispositivo. Por ejemplo, podrías especificar en un juego multijugador que todos los jugadores no chocan entre sí y que los monstruos no chocan entre sí, pero los jugadores y los monstruos deberían chocar entre sí.

Enlace al manual aquí . (Búsqueda de filtrado).

jgallant
fuente
2

Si tiene dos tipos de objetos que no deberían chocar con otro, entonces lo siguiente funciona.

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);
Matthew James Davis
fuente