Box2d - 动态更改接触过滤器

Osp*_*pho 3 objective-c objective-c++ box2d cocos2d-iphone

我使用cocos2d(iOS)和box2d来创建游戏.
我已经到了需要更改接触过滤器中间模拟的地步,并想知道如何解决这个问题.
我需要使用maskbits和categorybits,这很好,我只是不确定如何将它们应用到b2body游戏中.

我想我可能需要在初始化时检索b2body的原始b2fixture或b2fixturedef,相应地更改值然后调用方法刷新 - world.Refilter()?

这听起来有点准确吗?


奥利弗肯定赞赏任何建议.

ifo*_*e2d 9

b2Filter filter;

for ( b2Fixture* f = body->GetFixtureList(); f; f = f->GetNext() ) {
    f->GetFilterData( &filter );
    filter.categoryBits = ...;
    filter.maskBits = ...;
    filter.groupIndex = ...;
    f->SetFilterData( &filter );
}
Run Code Online (Sandbox Code Playgroud)

显然这会改变身体上所有灯具的滤波器设置- 如果你想要更具选择性,你必须能够以某种方式告诉哪个灯具.例如.如果你知道它是唯一的圆形夹具,你可以看看要确定的夹具类型,否则你将不得不使用夹具的用户数据.