热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

动态改变接触过滤器-Box2d-Changingcontactfilteronthefly

Imusingcocos2d(iOS)andbox2dtocreateagame.IhavecometothepointwhereIneedtochanget

Im using cocos2d (iOS) and box2d to create a game.
I have come to the point where I need to change the contact filter mid simulation and wondering how to go about this.
I need to use maskbits and categorybits, which is fine, im just unsure how to apply them to a b2body mid game.

我使用cocos2d (iOS)和box2d创建一个游戏。我已经到了需要更改中间模拟的接触式过滤器的时候了,我想知道该怎么做。我需要使用maskbits和categorybits,这很好,我只是不确定如何将它们应用到b2body mid游戏中。

I'm thinking I may need to retrieve the original b2fixture or b2fixturedef of the b2body on initialization, alter the values accordingly then call a method to refresh - world.Refilter()?

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

Does this sound somewhat accurate?

这听起来有点准确吗?

Any advice is surely appreciated
Oliver.

奥利弗对任何建议都很感激。

3 个解决方案

#1


9  

b2Filter filter;

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

Obviously this would change the filter settings for all fixtures on a body - if you want to be more selective you will have to be able to tell which fixture is which somehow. Eg. if you know it's the only circle fixture you could just look at the type of the fixture to decide, otherwise you would have to make use of the fixture's user data I guess.

显然,这将更改主体上所有装置的过滤器设置——如果您想要更有选择性,您必须能够以某种方式知道哪个装置是哪个装置。如。如果你知道这是唯一一个圆夹具,你可以只看夹具的类型来决定,否则你将不得不使用夹具的用户数据。

#2


0  

You can iterate over all bodies in the b2World. On each body you can iterate over it's fixture and change it's filter. To identify your bodies you can use userData.

可以遍历b2World中的所有主体。在每个主体上,您可以遍历它的fixture并更改它的过滤器。要识别您的身体,您可以使用userData。

#3


0  

The answer from iforce2d might be obsolete. I got the following code working properly with box2d v2.2.1, cocos2D v2.0.0 using Xcode v4.5.2 (here I assume I have a pointer to a b2Body named 'body' with only one fixture, i.e., I don't iterate over all fixtures on the body):

来自iforce2d的答案可能已经过时了。我使用Xcode v4.5.2使用box2d v2.2.1、cocos2D v2.0.0正确运行了以下代码(在这里,我假设我有一个指向一个名为“body”的b2Body的指针,只有一个fixture,即“body”。,我不会对身体上所有的固定装置进行迭代):

b2Fixture *fix = body->GetFixtureList();
b2Filter filter = fix->GetFilterData();   
filter.groupIndex = -1*kPlayerGroupIndex; 
fix->SetFilterData(filter);

In the above code I prevent 'body' from colliding with my player body which also has the same groupIndex value, i.e., -1*kPlayerGroupIndex, where kPlayerGroupIndex is a positive integer constant. Any bodies with this negative groupIndex never collide with one another. You could also update the categoryBits or maskBits accordingly to prevent collisions.

在上面的代码中,我阻止了“body”与我的player body发生冲突,它也具有相同的groupIndex值,即。-1*kPlayerGroupIndex,其中kPlayerGroupIndex为正整数常量。任何具有这个负群指数的物体都不会相互碰撞。您还可以相应地更新类别位或maskBits,以防止冲突。

GetFilterData(&filter) and SetFilterData(&filter) returned errors for me given the version numbers I quoted above.

GetFilterData(&filter)和SetFilterData(&filter)返回了我上面引用的版本号的错误。


推荐阅读
  • imnewtotheswiftandxcodeworld,soimhavingaproblemtryingtointegrateapackagetomypro ... [详细]
  • 本文介绍了P1651题目的描述和要求,以及计算能搭建的塔的最大高度的方法。通过动态规划和状压技术,将问题转化为求解差值的问题,并定义了相应的状态。最终得出了计算最大高度的解法。 ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • 开发笔记:实验7的文件读写操作
    本文介绍了使用C++的ofstream和ifstream类进行文件读写操作的方法,包括创建文件、写入文件和读取文件的过程。同时还介绍了如何判断文件是否成功打开和关闭文件的方法。通过本文的学习,读者可以了解如何在C++中进行文件读写操作。 ... [详细]
  • 本文介绍了OpenStack的逻辑概念以及其构成简介,包括了软件开源项目、基础设施资源管理平台、三大核心组件等内容。同时还介绍了Horizon(UI模块)等相关信息。 ... [详细]
  • iOS超签签名服务器搭建及其优劣势
    本文介绍了搭建iOS超签签名服务器的原因和优势,包括不掉签、用户可以直接安装不需要信任、体验好等。同时也提到了超签的劣势,即一个证书只能安装100个,成本较高。文章还详细介绍了超签的实现原理,包括用户请求服务器安装mobileconfig文件、服务器调用苹果接口添加udid等步骤。最后,还提到了生成mobileconfig文件和导出AppleWorldwideDeveloperRelationsCertificationAuthority证书的方法。 ... [详细]
  • 在真实开发中,因为需求是不断变化的,说不定什么时候就需要往模型里添加新的字段,添加新的模型,甚至是大规模的重构; ... [详细]
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
  • IB 物理真题解析:比潜热、理想气体的应用
    本文是对2017年IB物理试卷paper 2中一道涉及比潜热、理想气体和功率的大题进行解析。题目涉及液氧蒸发成氧气的过程,讲解了液氧和氧气分子的结构以及蒸发后分子之间的作用力变化。同时,文章也给出了解题技巧,建议根据得分点的数量来合理分配答题时间。最后,文章提供了答案解析,标注了每个得分点的位置。 ... [详细]
  • C++字符字符串处理及字符集编码方案
    本文介绍了C++中字符字符串处理的问题,并详细解释了字符集编码方案,包括UNICODE、Windows apps采用的UTF-16编码、ASCII、SBCS和DBCS编码方案。同时说明了ANSI C标准和Windows中的字符/字符串数据类型实现。文章还提到了在编译时需要定义UNICODE宏以支持unicode编码,否则将使用windows code page编译。最后,给出了相关的头文件和数据类型定义。 ... [详细]
  • 斯诺登质疑FBI要求苹果解锁iPhone的真实意图
    爱德华·斯诺登对FBI要求苹果解锁iPhone一事表示质疑,称其完全是扯谈。斯诺登在一次峰会上发表了自己的看法,并分享了一篇揭穿FBI真实企图的文章。他认为这场战役将是未来十年内最重大的科技案件。斯诺登对于监控隐私问题非常敢于发表意见。 ... [详细]
  • Android自定义控件绘图篇之Paint函数大汇总
    本文介绍了Android自定义控件绘图篇中的Paint函数大汇总,包括重置画笔、设置颜色、设置透明度、设置样式、设置宽度、设置抗锯齿等功能。通过学习这些函数,可以更好地掌握Paint的用法。 ... [详细]
  • 使用圣杯布局模式实现网站首页的内容布局
    本文介绍了使用圣杯布局模式实现网站首页的内容布局的方法,包括HTML部分代码和实例。同时还提供了公司新闻、最新产品、关于我们、联系我们等页面的布局示例。商品展示区包括了车里子和农家生态土鸡蛋等产品的价格信息。 ... [详细]
  • macOS Big Sur全新设计大版本更新,10+个值得关注的新功能
    本文介绍了Apple发布的新一代操作系统macOS Big Sur,该系统采用全新的界面设计,包括图标、应用界面、程序坞和菜单栏等方面的变化。新系统还增加了通知中心、桌面小组件、强化的Safari浏览器以及隐私保护等多项功能。文章指出,macOS Big Sur的设计与iPadOS越来越接近,结合了去年iPadOS对鼠标的完善等功能。 ... [详细]
  • [转载]从零开始学习OpenGL ES之四 – 光效
    继续我们的iPhoneOpenGLES之旅,我们将讨论光效。目前,我们没有加入任何光效。幸运的是,OpenGL在没有设置光效的情况下仍然可 ... [详细]
author-avatar
呼吸的雨儿作_741
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有