matter.js学习笔记(二)--Composites.stack()分析
2017-09-10 22:51
423 查看
写在前面
Composites.stack()可以用来创建物体堆。在此分析其具体用法。函数分析
1.先上源码
Composites.stack = function(xx, yy, columns, rows, columnGap, rowGap, callback) { var stack = Composite.create({ label: 'Stack' }), x = xx, y = yy, lastBody, i = 0; for (var row = 0; row < rows; row++) { var maxHeight = 0; for (var column = 0; column < columns; column++) { var body = callback(x, y, column, row, lastBody, i); if (body) { var bodyHeight = body.bounds.max.y - body.bounds.min.y, bodyWidth = body.bounds.max.x - body.bounds.min.x; if (bodyHeight > maxHeight) maxHeight = bodyHeight; Body.translate(body, { x: bodyWidth * 0.5, y: bodyHeight * 0.5 }); x = body.bounds.max.x + columnGap; Composite.addBody(stack, body); lastBody = body; i += 1; } else { x += columnGap; } } y += maxHeight + rowGap; x = xx; } return stack; };
参数xx,yy分别为物体堆中第一个物体的x和y坐标,columns和 rows分别为所要创建的物体堆的列数和行数,columnGap和rowGap分别为物体与物体之间的列间隙和行间隙,最后,由
var body = callback(x, y, column, row, lastBody, i);可以看出callback为生成的具体物体的方法。
当然,前提要声明Composites :
Composites=Matter.Composites
2.生成堆实例。
var stack=Composites.stack(250,100,6,3,0,0,function (x,y) { return Bodies.rectangle(x,y,80,20); });
这里,生成的是,第一个物体在位置(250,100),共6列,3行,每个物体为长80,宽20的矩形所够成的物体堆。
3.生成每个物体为圆的堆
var stack_circle=Composites.stack(380,100,7,5,0,0,function (x,y) { return Bodies.circle(x,y,20); });
如图,世界里有圆形物体构成的堆和矩形物体构成的堆。
4.代码全文
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>test</title>
<script src="../build/matter.js"></script>
</head>
<body>
<script>
var Engine=Matter.Engine,
Render=Matter.Render,
World=Matter.World,
Composites=Matter.Composites,
Bodies=Matter.Bodies;
var engine=Engine.create(),
world=engine.world;
var render=Render.create({
engine:engine,
element:document.body
});
Render.run(render);
Engine.run(engine);
var stack=Composites.stack(250,100,6,3,0,0,function (x,y) { return Bodies.rectangle(x,y,80,20); });
var ground=Bodies.rectangle(500,600,1000,100,{isStatic:true});
World.add(world,[stack,ground]);
</script>
</body>
</html>
写在后面
后面将分析给世界添加鼠标控制。相关文章推荐
- matter.js学习笔记(六)--Composites.softBody()制造布料或球网
- JS学习笔记 – 分析 JavaScript的执行顺序
- 韩顺平 javascript教学视频_学习笔记13_类和对象细节_创建对象的几种方式_js对象内存分析
- iOS学习笔记28-JS执行过程分析
- Vue.js 源码学习笔记 -- 分析前准备1 -- vue三大利器
- 韩顺平 javascript教学视频_学习笔记9_js函数调用过程内存分析_js函数细节
- Vue.js 源码学习笔记 -- 分析前准备2 -- Object.defineProperty
- 韩顺平_轻松搞定网页设计(html+css+javascript)_第30讲_类和对象细节_创建对象的几种方式_js对象内存分析_学习笔记_源代码图解_PPT文档整理
- js面向对象学习笔记之九(BOM 与 DOM 中常用属性分析)
- 韩顺平_轻松搞定网页设计(html+css+javascript)_第26讲_js函数调用过程内存分析_js函数细节_学习笔记_源代码图解_PPT文档整理
- Z-STACK学习笔记-OSAL分析
- Full Stack Web Development Angularjs(二)学习笔记
- node.js学习笔记(3)--Express创建的项目分析
- js面向对象的学习笔记九(BOM 与 DOM 经常使用的属性分析)
- matter.js学习笔记(四)--Constraint.create()制造跷跷板
- js学习笔记 chapter5 引用类型
- JS表单学习笔记(思维导图)
- js学习笔记:script元素
- Ferris这个教程学习笔记:js示例1.1:控制div属性
- Ferris这个教程学习笔记:js示例2.2:函数接收参数并弹出