bagaimana mengabaikan tabrakan fisika dari beberapa objek di box2d

8

Saya tahu ini kedengarannya konyol tetapi saya ingin beberapa objek mengikuti fisika sementara yang lain tidak saling bertabrakan.

Saya mencoba mencapainya dengan menetapkan posisi mereka secara eksklusif. Tapi kemudian itu akan mengabaikan semua fisika.

Apakah yang saya coba lakukan bahkan mungkin?

Tae-Sung Shin
sumber
Saya tidak yakin apa yang ingin Anda capai, tetapi tubuh kinematik mungkin membantu juga.
ThatOneGuy

Jawaban:

11

Baca tentang penyaringan tabrakan di manual Box2D:

Penyaringan tabrakan memungkinkan Anda untuk mencegah tabrakan di antara perlengkapan. Misalnya, Anda membuat karakter yang mengendarai sepeda. Anda ingin sepeda bertabrakan dengan medan dan karakter bertabrakan dengan medan, tetapi Anda tidak ingin karakter bertabrakan dengan sepeda (karena mereka harus tumpang tindih). Box2D mendukung penyaringan tabrakan tersebut menggunakan kategori dan grup.

Box2D mendukung 16 kategori tabrakan. Untuk setiap fixture Anda dapat menentukan kategori mana itu milik. Anda juga menentukan kategori apa yang bisa bertabrakan dengan fixture ini. Misalnya, Anda bisa menentukan dalam game multipemain yang semua pemain tidak saling bertabrakan dan monster tidak saling bertabrakan, tetapi pemain dan monster harus bertabrakan

Tautan ke manual di sini . (Cari Penyaringan).

jallan
sumber
2

Jika Anda memiliki dua jenis objek yang tidak boleh bertabrakan dengan yang lain, maka berikut ini berfungsi.

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
sumber