iPhone cocos2d box2d机身碰撞检测无需施力

时间:2012-08-12 20:45:17

标签: iphone cocos2d-iphone collision-detection box2d-iphone

我正在为iPhone编写Cocos2D box2d游戏。 我有两个动态的身体,我希望它们是从外面施加的力量,但它们不会相互施力并检测它们的碰撞。 我怎样才能做到这一点?

我也希望他们在碰撞后在同一个位置一起移动。 我怎么能这样做?

2 个答案:

答案 0 :(得分:0)

  

他们不互相施力并发现他们的碰撞

听起来你可能想看一下碰撞过滤。这个答案有一些代码可以动态地改变一个物体的碰撞过滤索引https://stackoverflow.com/a/11283206/735204

  

他们在碰撞后在同一个位置一起移动

可能是某种关节(例如焊点?)

来自手册:http://www.box2d.org/manual.html

  

关节用于将身体约束到世界或彼此。游戏中的典型例子包括ragdolls,teeters和滑轮。关节可以通过多种不同的方式组合,以创造有趣的动作。

     

某些关节提供限制,因此您可以控制运动范围。一些接头提供电动机,可用于以规定的速度驱动接头,直到超过规定的力/扭矩。

     

联合电机可以多种方式使用。您可以通过指定与实际位置和所需位置之间的差值成比例的关节速度来使用电机来控制位置。您还可以使用电机模拟关节摩擦:将关节速度设置为零,并提供小但显着的最大电机力/扭矩。然后电动机将试图保持关节不动,直到负载变得太强。

答案 1 :(得分:0)

对于最后一个答案感到抱歉,只是检查我是否可以写它。

这个怎么样?

bodyDef.isSensor = true;

并使用ContactListener来检测碰撞。 Box2d for collision detection

您也可以使用box2d过滤器。例如:

记住:如果groupIndex< 0,相同的身体永远不会相互碰撞。这就是你所需要的。

b2Filter bodyFilter;
 bodyFilter.groupIndex = -1; 
 bodyFilter.categoryBits = 0x0002;



 fixtureDef.filter = bodyFilter;