目录

我的学习分享

记录精彩的程序人生

【Box2d】Box2d中模拟摩擦力效果的几种方式

b2BodyDef中的linearDamping:模拟刚体线性速度摩擦力,线性速度阻尼,取值范围在0~1。线性速度阻尼越大,刚体移动速度降低的越快,反之亦然。在正常的重力加速度环境下,刚体会因最终落至地面而停止运动,用到linearDamping线性阻尼的情况比较少。在重力加速度为0的俯视和太空类游戏中,在没有发生碰撞的情况下,刚体不受外力影响,会保持匀速运动,这是可以通过设置linearDamping线性速度阻尼,来模拟地面摩擦力或空气阻力,让刚体“尽快”停下来。通常不使用线性阻尼,因为它会使物体看起来有点儿漂浮。

b2BodyDef中的angularDamping:模拟刚体角速度摩擦力,刚体角速度阻尼,或者叫做“旋转摩擦力”可能会更好理解一些。该属性值取值范围在0~1之间,取值越大角速度降低的越快,取值越小角速度降低的越慢。

b2FixtureDef中的friction:模拟刚体表面摩擦力,刚体表面摩擦系数,取值范围0~1,取值越大,刚体表面摩擦力越大。friction和linearDamping有些相似,但又不完全一样。它们都是影响刚体的线性速度,friction决定了两个刚体之间发生接触时所产生的摩擦力的大小,而linearDamping影响的是刚体自由运动时速度的衰减,类似于“空气阻力”。通过修改friction属性,可以实现冰面、沙滩、玻璃等表面摩擦力不同的材质。

b2FrictionJoint摩擦关节:同样是模拟摩擦力,但是这个摩擦力不是单纯地为了降低刚体的线性速度或角速度,而是使关节的两个刚体产生相互制动作用。简单地讲,当摩擦关节中任意一个刚体的线性速度或角速度发生变化时,摩擦关节会对另一个刚体施加一定的作用力或扭力,促使两个刚体的线性速度和角速度保持一致。这个过程持续的时长取决于作用力或扭力的大小。当某个刚体为静态刚体、可动刚体或者空刚体时,摩擦关节的作用力将表现为单纯对另一个刚体的摩擦力。(类似linearDampling?)

参考《Box2D 物理游戏编程初学者指南》,陈文登编著