写在前面
Composites.chain()可以将已有的stack物体堆链接在一起,构成一个整体,里面的参数为已有的物体堆stack,链接点距离物体中心的x和y方向的偏移量。
1.源码分析
Composites.chain = function(composite, xOffsetA, yOffsetA, xOffsetB, yOffsetB, options) {
var bodies = composite.bodies;
for (var i = 1; i < bodies.length; i++) {
var bodyA = bodies[i - 1],
bodyB = bodies[i],
bodyAHeight = bodyA.bounds.max.y - bodyA.bounds.min.y,
bodyAWidth = bodyA.bounds.max.x - bodyA.bounds.min.x,
bodyBHeight = bodyB.bounds.max.y - bodyB.bounds.min.y,
bodyBWidth = bodyB.bounds.max.x - bodyB.bounds.min.x;
var defaults = {
bodyA: bodyA,
pointA: { x: bodyAWidth * xOffsetA, y: bodyAHeight * yOffsetA },
bodyB: bodyB,
pointB: { x: bodyBWidth * xOffsetB, y: bodyBHeight * yOffsetB }
};
var constraint = Common.extend(defaults, options);
Composite.addConstraint(composite, Constraint.create(constraint));
}
composite.label += ' Chain';
return composite;
};
参数composite即为传入的物体堆,从第一个物体开始,到倒数第二个物体截止,每个物体和下一个物体链接。
xOffsetA, yOffsetA为每对链接的第一个物体的链接点距离中心位置的偏移百分比,之所以是百分比,是因为pointA: { x: bodyAWidth * xOffsetA, y: bodyAHeight * yOffsetA }
,pointA的x和y属性为实际的偏移量,是由物体的实际宽度乘以偏移百分比而得到。
2.创造木板,并用铁索链接。
var chains=Composites.stack(666,600,10,1,9,0,function (x, y) {
return Bodies.rectangle(x,y,80,30,{
chamfer:15
})
});
参数分析。这里的666和600分别是第一块木板的x和y坐标,10和1分别为10列1行,9和0分别为每块木板之间的列间隙