目录
Composites
car 汽车
newtonsCradle 牛顿摆
1、多个刚体通过约束组合在一起,称为复合体。复合体对外当作一个刚体,复合体的物理属性是通过所包含的刚体的属性综合计算出来的。
2、Matter.Composite 模块包含用于创建和处理复合体的方法。
3、Matter.Composites 模块提供了几种特别的复合材料,如链:Composites.chain、牛顿摆:Composites.newtonsCradle、软体:Composites.softBody、汽车:Composites.car 、堆叠:Composites.stack、网格:mesh、金字塔:pyramid。
4、Matter.Composites 模块提供了几种特别的复合材料,如链:Composites.chain、牛顿摆:Composites.newtonsCradle、软体:Composites.softBody、汽车:Composites.car 、堆叠:Composites.stack、网格:mesh、金字塔:pyramid。
5、本文主要讲解
官网API:http://brm.io/matter-js/docs/classes/Composites.html#method_car
car 创建包含车身和约束的简单汽车设置的组合。由一个矩形和两个圆形构成,矩形作为汽车的主题,会对4个角进行圆角处理,两个圆形作为轮子。
/**
* Creates a composite with simple car setup of bodies and constraints.
* @param {number} xx 汽车中心点的x坐标
* @param {number} yy 汽车中心点的y坐标
* @param {number} width 汽车主体(矩形)的宽度
* @param {number} height 汽车主体(矩形)的高度
* @param {number} wheelSize 汽车轮子(圆形)的半径
* @return {composite} A new composite car body
*/
Composites.car = function(xx, yy, width, height, wheelSize)
Matter-JS
提示:上面使用的是 matter.js 0.14.2 版本,亲测 0.12.0 版本时样式不是这样的,而且当两辆车重叠时会有明显的抖动。
官网Demo:http://brm.io/matter-js/demo/#car
官网API:http://brm.io/matter-js/docs/classes/Composites.html#method_newtonsCradle
newtonsCradle 方法源码如下,依次创建 number 个圆形,然后对圆形附加约束挂在约束点上。
/**
* Creates a composite with a Newton's Cradle setup of bodies and constraints.
* @method newtonsCradle
* @param {number} xx 第一个摆的悬挂点的x坐标
* @param {number} yy 第一个摆的悬挂点的y坐标
* @param {number} number 摆的总个数
* @param {number} size 摆球的半径
* @param {number} length 摆的悬挂点到摆球圆形的距离,即绳子的长度
* @return {composite} A new composite newtonsCradle body
*/
Composites.newtonsCradle = function(xx, yy, number, size, length) {
var newtonsCradle = Composite.create({ label: 'Newtons Cradle' });
for (var i = 0; i < number; i++) {
var separation = 1.9,
circle = Bodies.circle(xx + i * (size * separation), yy + length, size,
{ inertia: Infinity, restitution: 1, friction: 0, frictionAir: 0.0001, slop: 1 }),
constraint = Constraint.create({ pointA: { x: xx + i * (size * separation), y: yy }, bodyB: circle });
Composite.addBody(newtonsCradle, circle);
Composite.addConstraint(newtonsCradle, constraint);
}
return newtonsCradle;
};
使用示例如下:
Matter-JS
官网demo:http://brm.io/matter-js/demo/#newtonsCradle