首页 > 代码库 > 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)备忘
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。