我正在使用 Box2d 进行自上而下的游戏。“地面”是一系列瓦片,其中每个瓦片都是具有传感器形状的静态体。即使物体并没有真正与地面“碰撞”,我可以让摩擦生效吗?
如果 Box2d 不允许我这样做,我考虑尝试通过检测当前正在移动对象的力并施加与之相反的力来实现我自己的,但我不太确定如何检测该力。
另一种方法是设置linearDamping
在你的身体上。您可以根据对象所在的图块进行不同的设置。
摩擦力与物体的速度相反,与其他力无关。
如果设置线性阻尼不够或依赖 b2Body 的属性不合适,您可以轻松计算非线性摩擦力并在每一帧调用 ApplyLinearImpulse() 或 ApplyLinearForce()。
使用 b2Body.GetLinearVelocity() 查询速度,根据需要缩放(非线性)结果以获得力,并反转两个分量的符号。
如果您决定停止身体(当它慢到可以粘住时),SetLinearVelocity() 无需计算即可解决问题。
ApplyImpulse()
而不是ApplyForce()
更好地工作。