2010-04-02 49 views
7

我使用Box2d作为自顶向下的游戏。 “地面”是一系列瓷砖,其中每个瓷砖是具有传感器形状的静态物体。即使物体没有真正与地面“碰撞”,我也可以让摩擦生效吗?Box2d中的摩擦

如果Box2d不会让我这样做,我考虑尝试通过检测当前正在移动物体的力以及施加与其相反的力来实现我自己的目标,但是我不太清楚如何检测力。

回答

0

ApplyImpulse()而不是ApplyForce()效果更好。

+3

为什么'ApplyImpulse()'比'ApplyForce()'更好? – 2012-05-27 03:37:16

6

这样做的另一种方法是在您的身体上设置linearDamping。您可以根据您的对象所在的拼贴块进行不同的设置。

1

摩擦是针对身体的速度,无论其他力量如何。

如果设置线性阻尼不够或者依赖于b2Body的属性是不合适的,您可以轻松计算非线性摩擦力并在每帧中调用ApplyLinearImpulse()或ApplyLinearForce()。

  • 查询与b2Body.GetLinearVelocity速度(),比例(非线性),以根据需要得到的力,并且反转两种成分的符号的结果。如果你决定停止身体(当它足够缓慢地粘住)时,SetLinearVelocity()会在没有计算的情况下执行这个技巧。