P2中用来约束刚体运动的还有弹簧Spring。

弹簧除约束两个刚体之间的运动轨迹外,通过damping阻尼和stiffness刚度系数等属性,使得刚体在向目标移动时,

出现类似弹簧的简谐运动。Spring只是抽象的父类,参与运动模拟的是两个子类LinearSpring和RotationalSpring。

1)LinearSpring:
LinearSpring是线性弹簧,对刚体的约束行为和距离关节DistanceConstraint相同,按照指定的距离restLength将两个刚体约束在一起,其中任何一个刚体的位置发生变化,会牵制着另一个刚体运动,以保证两者的间距为distance。在运动过程中,刚体bodyB呈现简谐运动。两个刚体的角度不受约束,可以绕节点旋转。构造函数: 
function LinearSpring(bodyA:Body, bodyB:Body, options:Object) 
其中,bodyA和bodyB为受弹簧约束的两个刚体,options为关节设置选项,可以缺省,P2会按默认值进行设置。选项为: 
·stiffness:弹簧的刚度系数,默认100。 
·damping:弹簧做简谐运动过程中的阻尼系数,默认1 
·restLength:弹簧不受力状态下的长度,默认为worldAnchorA和worldAnchorB间的距离 
·localAnchorA:刚体bodyA本地坐标系下的节点坐标,默认[0,0] 
·localAnchorB:刚体bodyB本地坐标系下的节点坐标,默认[0,0] 
·worldAnchorA:弹簧节点在全局坐标系下的坐标,设置后将自动转换并覆盖localAnchorA 
·worldAnchorB:弹簧节点在全局坐标系下的坐标,设置后将自动转换并覆盖localAnchorB 
2)RotationalSpring:
RotationalSpring是扭力弹簧,对刚体的约束类似齿轮关节,按照指定的restAngle约束两个刚体之间的角度差。当刚体的角度不等于restAngle时,bodyB会进行简谐运动旋转,直至角度差恢复至restAngle。两个刚体的坐标位置不受约束,可以自由移动。 
function LinearSpring(bodyA:Bodt, bodyB:Body, options:Object) 
其中,bodyA和bodyB为受弹簧约束的两个刚体,options为关节设置选项,可以缺省,P2会按默认值进行设置。选项为: 
·restAngle:弹簧不受力无简谐运动下刚体bodyA和bodyB间的角度差,默认为创建扭力弹簧时两个刚体之间的角度差 
·stiffness:弹簧的刚度系数,默认100。 
·damping:弹簧做简谐运动过程中的阻尼系数,默认1

 
05-16 16:31