首页 > 代码库 > P2.JS之旋转约束(RevoluteConstraint)备忘

P2.JS之旋转约束(RevoluteConstraint)备忘

作用:物体可以绕着所设置的锚点作旋转运动。用途:车轮。
 
先上段代码:
 
1 var r1 = new p2.RevoluteConstraint (holderBody, circleBody, {2     worldPivot : [0, 5]3     //localPivotA: [1, -1],4     //localPivotB: [0, 0]5 });6 r1.enableMotor() ;7 r1.setMotorSpeed( 5);8 world.addConstraint(r1) ;

 

技术分享

 

矩形内的那个红点表示矩形的中心点,全局坐标为[0,4],现在这个圆形是在绕着某个点作着圆周运动。
 
说说这段代码用到的几个属性。
 
worldPivot,A pivot point given in world coordinates. If specified, localPivotA and localPivotB are automatically computed from this value.翻译:旋转的中心点,是一个给定的全局坐标。如果设置了这个属性,localPivotA和localPivotB属性将自动被计算成这个值(也就是不用设置localPivotA和localPivotB了)。
上图的那个圆形实质就是在绕着坐标[0,5]作圆周运动,也就是以矩形中心点还要上去一点的位置为旋转中心点。
 
稍微改动下代码,变成:
 
1 var r1 = new p2.RevoluteConstraint (holderBody, circleBody, {2 //    worldPivot: [0, 5]3     localPivotA : [1, -1] ,4     localPivotB : [0, 0]5 });6 r1.enableMotor() ;7 r1.setMotorSpeed( 5);8 world.addConstraint(r1) ;

 

技术分享

 

此时效果图,如上。
 
这里有用到localPivotA和localPivotB属性。
 
localPivotA,The point relative to the center of mass of bodyA which bodyA is constrained to.翻译:此点的坐标是相对于bodyA质量中心点而言(其实也就是bodyA的中心点啦,因为我们的刚体的密度都是理想中的平均分布的)
 
localPivotB和localPivotA一样的概念。
 
这样就能解释为什么此时圆形是绕着那个梅红色的点进行旋转了。
 
另外,可以开启马达,方便作进一步的观察。setMotorSpeed(xx)的参数传递正数时,作的圆周运动是顺时针方向(CW)的。要想作逆时针方向(CCW)的圆周运动,可以传递一个负数参数。
 
练习的源码地址:https://gist.github.com/yxzblue/3a66babfb93b889f0833#file-revoluteconstraint-html
 
p2.js v0.6.0 的压缩包,链接:http://pan.baidu.com/s/1mgsW7xA 密码:bj85
p2.js 的Github地址:https://github.com/schteppe/p2.js

P2.JS之旋转约束(RevoluteConstraint)备忘