P2.JS之距离约束(DistanceConstraint)备忘

关键代码:
 1 //以下是地面和墙壁的代码
 2 //
 3 var body = new p2.Body({ mass: 0, position: [0, -5]});
 4 var shape = new p2.Plane();
 5 body.addShape(shape);
 6 world.addBody(body);
 7 
 8 //
 9 body = new p2.Body({ angle: Math.PI / 2, mass: 0, position: [10, 0]});
10 body.addShape(shape);
11 world.addBody(body);
12 
13 //
14 body = new p2.Body({ angle: -Math.PI / 2, mass: 0, position: [-10, 0]});
15 body.addShape(shape);
16 world.addBody(body);
17 
18 //以下是将两个小球进行距离约束的代码
19  var constraint = new p2.DistanceConstraint(circle1, circle2, {
20     distance: 3,
21     localAnchorA: [0, 0],
22     localAnchorB: [0, 0],
23     maxForce: Math.MAX_VALUE
24 });
25 world.addConstraint(constraint);
26 
27 constraint.collideConnected = true;
28 constraint.lowerLimitEnabled = true;
29 constraint.upperLimitEnabled = true;
30 constraint.lowerLimit = 2.5;
31 constraint.upperLimit = 4;

 

技术分享

 

先来作下墙壁代码的备忘。
 
Body初始化时,angle 设置为 Math.PI / 2,可以看作将水平面逆时针(CCW)旋转90度,再设置一个大一点x位置,就形成了一个右侧墙壁。同理,angle 设置为 -Math.PI / 2时,水平面是顺时针(CW)旋转90度,设置一个小一点的x位置,就是左墙壁了。
 
接着是距离约束的一些属性。
 
distance,即定义的localAnchorA及localAnchorB两个锚点的距离。
 
maxForce,即约束所受到的力。默认值是Math.MAX_VALUE,此时可以想像成两个小球之间有一根铁杆连接着。将 maxForce 设置成非最大值时,相当于两个小球之间是由一根竹杆所连接一样。
 
collideConnected,被连接的物体能否相撞,默认值是 true。这个属性可以配置上面的 maxForce 一起进行查看效果。将 maxForce 设置成较小的值,两球之间的相抗的约束力就变小了,默认情况下,小球可能会发生碰撞,即两个小球怎么也不会相交;当 collideConnected = false 时,两个小球就有可能相交了,因为它们被设置成不会相撞。
 
lowerLimitEnabled, uppperLimitEnabled, lowerLimit, upperLimit 这四个属性,可以使得距离约束增加类似伸缩活塞的特性。
 
 
p2.js v0.6.0 的压缩包,链接:http://pan.baidu.com/s/1mgsW7xA 密码:bj85
p2.js 的Github地址:https://github.com/schteppe/p2.js

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。