2

我是box2d的新手。我在box2d中开始了一个新游戏,并在世界上创建了5个动态物体。最初我需要防止它们之间发生碰撞。所以我将所有机构的组指数设为负数。触摸一个身体后,我想允许与那个身体发生碰撞。如何重置组索引。请帮忙..

4

2 回答 2

2

听起来你正在寻找类似的东西

b2Body *body = world->GetBodyList();
b2Filter filter = body->GetFilterData();
filter.maskBits = filter.maskBits | THE_RELEVANT_CATEGORY_BITS;
body->SetFilterData(&filter);

这里的想法是,您可以获得任何对象的碰撞过滤数据,使用一些布尔逻辑将碰撞数据分配给 maskBits 字段,然后使用 SetFilterData 将新的碰撞数据应用到主体。THE_RELEVANT_CATEGORY_BITS 应该是枚举类型的元素,其中每个碰撞过滤类别由唯一的二进制整数表示。

查看 box2D 教程了解更多关于这个http://www.iforce2d.net/b2dtut/collision-filtering

于 2012-07-01T15:20:34.243 回答
1

如果您有超过 1 个身体装置,那么您可以使用这段代码

for (b2Fixture* fix = body->GetFixtureList(); fix; fix = fix->GetNext())
{
    b2Filter filter=  fix->GetFilterData();

    filter.groupIndex = 0;
    filter.categoryBits = 0x0004;
    filter.maskBits = 0x0002;
    fix->SetFilterData(filter);
}
于 2013-04-02T07:49:53.320 回答