我正在为一个顶视游戏使用Box2d。 "地面"是一系列瓷砖,其中每个瓷砖都是带有传感器形状的静态物体。即使对象与地面没有真正的“碰撞”,我能让摩擦力生效吗?
如果Box2d不允许我这样做,我考虑尝试通过检测当前移动对象的力量,并施加相反的力量来实现自己的功能,但我不太确定如何检测该力量。
如果Box2d不允许我这样做,我考虑尝试通过检测当前移动对象的力量,并施加相反的力量来实现自己的功能,但我不太确定如何检测该力量。
另一种方法是在您的物体上设置linearDamping
。您可以根据对象所在的瓷砖设置不同的值。
摩擦力是针对物体的速度方向的,不考虑其他力。
如果设置线性阻尼不够或者依赖于b2Body的属性不合适,您可以轻松计算非线性摩擦力并在每一帧调用ApplyLinearImpulse()或ApplyLinearForce()。
使用b2Body.GetLinearVelocity()查询速度,按需要缩放(非线性),并反转两个分量的符号以获得力。
如果您决定停止物体(当它足够慢以粘附时),SetLinearVelocity()可以轻松完成任务而无需计算。
ApplyImpulse()
比ApplyForce()
效果要好得多。
ApplyImpulse()
为什么比 ApplyForce()
更有效? - Andres Riofrio