忽略Box2d(iphone)中机体之间的碰撞

时间:2013-03-16 07:49:35

标签: iphone filter box2d collision-detection collision

我有3种身体。他们是

1)MouseJointBody(仅使用mouseJoint移动)

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

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

我需要在这些身体之间发生碰撞:

1)带有MovingBodys和StaticBody以及世界bounderies的MouseJointBody

2)StaticBody仅限MouseJointBody

3)MovingBodys仅限MouseJointBody和世界bounderies

4)MovingBodys相互碰撞

但不需要与StaticBody和MovingBody发生冲突。我为这些机构设置了过滤数据,如下面的代码:

StaticBody:

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不会与世界盒发生碰撞。这两个人走出了世界。请告诉我这个解决方案。

2 个答案:

答案 0 :(得分:0)

在Farseer中,Box2D中的proyect baseb存在CollisionCategory但在Box2D中解析不同

请查看以下discussion

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

在讨论中处理了一个类似的案例,A命中B,C命中D,但A没有命中A

答案 1 :(得分:0)

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

MovingBodys例如:

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

(0x0006是墙的categoryBits)