como ignorar a colisão física de alguns objetos no box2d

8

Sei que isso parece bobagem, mas gostaria que alguns objetos seguissem a física, enquanto outros não colidissem.

Tentei alcançá-los definindo sua posição exclusivamente. Mas então ele ignorará toda a física.

O que estou tentando fazer é possível?

Tae-Sung Shin
fonte
Não tenho certeza do que você deseja alcançar, mas os corpos cinemáticos também podem ajudar.
ThatOneGuy

Respostas:

11

Leia sobre a filtragem de colisão no manual do Box2D:

A filtragem de colisão permite evitar colisões entre equipamentos. Por exemplo, diga que você cria um personagem que anda de bicicleta. Você quer que a bicicleta colida com o terreno e o personagem colide com o terreno, mas não quer que o personagem colida com a bicicleta (porque eles devem se sobrepor). O Box2D suporta essa filtragem de colisão usando categorias e grupos.

O Box2D suporta 16 categorias de colisão. Para cada equipamento, você pode especificar a qual categoria pertence. Você também especifica com quais outras categorias esse equipamento pode colidir. Por exemplo, você pode especificar em um jogo multiplayer que todos os jogadores não colidem uns com os outros e monstros não colidem uns com os outros, mas jogadores e monstros devem colidir

Link para o manual aqui . (Procure por filtragem).

jgallant
fonte
2

Se você tiver dois tipos de objetos que não devem colidir com outro, o seguinte 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
fonte