2012-08-12 92 views
0

我正在为iPhone编写Cocos2D box2d游戏。 我有2个动态的身体,我希望他们从外面施加力量,但他们不施加力量对方,并检测他们的碰撞。 我该如何做到这一点?iPhone cocos2d box2d身体碰撞检测不用力

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

+0

林不知道你在问什么。你应该考虑重写这个问题或者增加更多的内容。 – 2012-08-17 15:57:14

回答

0

他们不用力对方并检测他们的碰撞

听起来像是你可能想看看在碰撞过滤。这个答案有一些代码,改变车身动态https://stackoverflow.com/a/11283206/735204

他们在相同的位置一起移动,碰撞后

也许某种联合(如weldjoint?)

碰撞过滤指标

从手册:http://www.box2d.org/manual.html

接头是用于约束机构世界或每个O疗法。游戏中的典型例子包括ragdolls,teeters和滑轮。关节可以用许多不同的方式组合起来创造有趣的动作。

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

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

+0

感谢您的回答。 – ttotto 2012-08-17 18:03:17

+0

但我已经知道他们。 1.如果我使用不同的类别位和掩码位,我如何检测它们的碰撞? 2.我已经尝试过使用距离关节,但有时精灵的位置与身体的位置不同。所以他们有时会分开。 – ttotto 2012-08-17 18:10:58

+0

哦 - 为了检测碰撞而不让车身对碰撞产生反应,请首先使用传感器http://www.iforce2d.net/b2dtut/sensors – 2012-08-17 19:05:55

0

对不起,最后的答案,只是检查我可以写它。

这是怎么回事?

bodyDef.isSensor = true; 

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

此外,您可以使用box2d过滤器。例如:

请注意:如果groupIndex < 0,相同的物体不会相互碰撞。那是你需要的。

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



fixtureDef.filter = bodyFilter;