comment ignorer la collision physique de certains objets dans box2d

8

Je sais que cela semble idiot, mais j'aimerais que certains objets suivent la physique tandis que d'autres ne se heurtent pas.

J'ai essayé de les atteindre en définissant exclusivement leur position. Mais alors il ignorera toute la physique.

Ce que j'essaie de faire est-il même possible?

Tae-Sung Shin
la source
Je ne sais pas trop ce que vous voulez réaliser, mais les corps cinématiques pourraient aussi aider.
ThatOneGuy

Réponses:

11

Lisez sur le filtrage des collisions dans le manuel de Box2D:

Le filtrage des collisions vous permet d'éviter les collisions entre les appareils. Par exemple, disons que vous créez un personnage qui fait du vélo. Vous voulez que le vélo entre en collision avec le terrain et le personnage entre en collision avec le terrain, mais vous ne voulez pas que le personnage entre en collision avec le vélo (car ils doivent se chevaucher). Box2D prend en charge ce filtrage des collisions à l'aide de catégories et de groupes.

Box2D prend en charge 16 catégories de collisions. Pour chaque appareil, vous pouvez spécifier à quelle catégorie il appartient. Vous spécifiez également les autres catégories avec lesquelles ce luminaire peut entrer en collision. Par exemple, vous pouvez spécifier dans une partie multijoueur que tous les joueurs ne se heurtent pas et que les monstres ne se heurtent pas entre eux, mais les joueurs et les monstres doivent entrer en collision

Lien vers le manuel ici . (Recherche de filtrage).

jgallant
la source
2

Si vous avez deux types d'objets qui ne doivent pas entrer en collision avec un autre, alors les opérations suivantes fonctionnent.

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
la source