Box2d中的摩擦力问题

8
我正在为一个顶视游戏使用Box2d。 "地面"是一系列瓷砖,其中每个瓷砖都是带有传感器形状的静态物体。即使对象与地面没有真正的“碰撞”,我能让摩擦力生效吗?
如果Box2d不允许我这样做,我考虑尝试通过检测当前移动对象的力量,并施加相反的力量来实现自己的功能,但我不太确定如何检测该力量。

在游戏物理编程中,力通常很难处理,因此开发人员使用速度/冲量进行工作。至于为什么,这是一个较长的故事,但您可以参考Erin在GDC演讲中的解释。 - user3471786
3个回答

7

另一种方法是在您的物体上设置linearDamping。您可以根据对象所在的瓷砖设置不同的值。


1

摩擦力是针对物体的速度方向的,不考虑其他力。

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

  • 使用b2Body.GetLinearVelocity()查询速度,按需要缩放(非线性),并反转两个分量的符号以获得力。

  • 如果您决定停止物体(当它足够慢以粘附时),SetLinearVelocity()可以轻松完成任务而无需计算。


-1

ApplyImpulse()ApplyForce()效果要好得多。


5
ApplyImpulse() 为什么比 ApplyForce() 更有效? - Andres Riofrio

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接