【问题标题】:Ignoring Collisions Between Bodies in Box2d (iphone)在 Box2d (iphone) 中忽略实体之间的碰撞
【发布时间】:2013-03-05 00:34:14
【问题描述】:

我有 3 种类型的身体。他们是

1) MouseJointBody (它只与 mouseJoint 一起移动)

2) 2 MovingBodys(它在世界上不断移动)

3) StaticBody (固定在固定位置)

我需要这些物体之间的碰撞:

1) MouseJointBody 与 MovingBodys 和 StaticBody 以及世界边界

2) 仅带有 MouseJointBody 的 StaticBody

3) MovingBodys 仅适用于 MouseJointBody 和世界边界

4) MovingBodys 相互碰撞

但不需要与 StaticBody 和 MovingBody 发生碰撞。我为这些主体设置过滤器数据,如下代码:

静态体:

fixDef.filter.categoryBits=0x0004;
fixDef.filter.maskBits= 0x0002;

MovingBodys:

fixDef.filter.categoryBits=0x0004;
fixDef.filter.maskBits= 0x0002;

MouseJointBody:

fixDef.filter.categoryBits=0x0002;
fixDef.filter.maskBits= 0x0004;

一切正常,但我的 MovingBodys 没有相互碰撞,MouseJointBody 和 MovingBody 没有与世界框发生碰撞。这两个正在走出世界。请告诉我这个的解决方案。

【问题讨论】:

标签: iphone filter box2d collision-detection collision


【解决方案1】:

在作为 Box2D 中的项目基础的 Farseer 中存在 CollisionCategory 但在 Box2D 中解决不同

请关注discussion

这个想法是分配身体类型是 each,并且身体只能碰撞。

在讨论中处理了一个类似的情况,A打B,C打D,但是A没有打A

【讨论】:

    【解决方案2】:

    我认为,当您使用过滤器时,您需要将过滤器应用于墙壁。 并设置所有的 maskBits。

    MovingBodys 示例:

    fixDef.filter.categoryBits=0x0004;
    fixDef.filter.maskBits= 0x0002 | 0x0006;
    

    (0x0006是墙的分类位)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-02-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多