objective-c - Box2d - 即时更改接触过滤器

标签 objective-c cocos2d-iphone box2d objective-c++

我正在使用 cocos2d (iOS) 和 box2d 创建游戏。
我已经到了需要在模拟中更改接触过滤器的地步,想知道如何去做。
我需要使用 maskbits 和 categorybits,这很好,我只是不确定如何将它们应用到 b2body 游戏中期。

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

这听起来有点准确吗?

任何建议都非常感谢
奥利弗。

最佳答案

b2Filter filter;

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

显然,这会更改主体上所有 灯具的过滤器设置 - 如果您想要更具选择性,您将必须能够以某种方式分辨出哪个灯具是哪个。例如。如果您知道它是唯一的圆形灯具,您可以只查看灯具的类型来决定,否则我猜您将不得不使用灯具的用户数据。

关于objective-c - Box2d - 即时更改接触过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6250701/

相关文章:

ios - 当您在 Cocos2d 中加载纹理(使用 Sprite 表)时,内存使用量如何增加?

iphone - Cocos2d 中的 2D Terraria 风格地形生成

ios - CC Sprite : setTexture doesn't work when the sprite is rendered using a CCSpriteBatchNode

java - libgdx 和 Box2d 碰撞优化

cocos2d-iphone - 如何破坏焊缝

iphone - 具有分页和来自 NSMutableArray 的数据的动态 UIScrollView

iphone - 数组计数抛出异常

ios - 属性延迟初始化与核心数据在主线程中运行

ios - iOS 应用程序中的联系人同步

iphone - 获取TMXTiledMap的tileet文件名