Iphone 如何在box2d中动态更改实体的组索引

Iphone 如何在box2d中动态更改实体的组索引,iphone,objective-c,xcode,box2d-iphone,Iphone,Objective C,Xcode,Box2d Iphone,我是box2d的新手。我已经在box2d中开始了一个新游戏,并在世界上创建了5个动态实体。最初我需要防止它们之间的碰撞。所以我把所有物体的群指数设为负值。在接触一个物体后,我想允许与该物体发生碰撞。如何重置组索引。请帮忙。听起来你在找类似的东西 b2Body *body = world->GetBodyList(); b2Filter filter = body->GetFilterData(); filter.maskBits = filter.maskBits | THE_REL

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

听起来你在找类似的东西

b2Body *body = world->GetBodyList();
b2Filter filter = body->GetFilterData();
filter.maskBits = filter.maskBits | THE_RELEVANT_CATEGORY_BITS;
body->SetFilterData(&filter);
这里的想法是,您可以获取任何对象的碰撞过滤数据,使用一些布尔逻辑将碰撞数据指定给maskBits字段,然后使用SetFilterData将新的碰撞数据应用于实体。_相关_CATEGORY_位应该是枚举类型的元素,其中每个冲突过滤类别由唯一的二进制整数表示


查看box2D教程了解更多信息

如果一个实体有多个装置,则可以使用这段代码

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);
}