赵工的个人空间


网络课堂部分转网页计算部分转编程演练

 游戏引擎使用技巧

首页 > 网络课堂 > 游戏引擎使用技巧 > Matter引擎的牛顿摆
Matter引擎的牛顿摆

展示物理学定律,非常直观非常著名的是牛顿摆,这是法国物理学家伊丹·马略特(Edme Mariotte)最早于1676年提出。
为了使用软件展示物理定律效果,很多人就研究了物理引擎,各种语言都有,浏览器中一般使用JavaScript,也有多种物理引擎,但是用来模拟牛顿摆效果时都有些差强人意, 往往并不能与实际效果完全一致。Matter.js物理引擎为了展示著名的牛顿摆,就设计了专用的Composites.newtonsCradle实体,其设计参数为:
var newtonsCradle=Matter.Composites.newtonsCradle(x, y, number, size, length);
其中,x和y为牛顿摆左上角的x、y坐标,number为牛顿摆中小球的数量,size为其中每个小球的直径,length为悬挂小球的线长。按参数设定后,就可以在浏览器中显示出一个完整的由number个小球组成的牛顿摆。

但这样设计的牛顿摆是静止的,只能使用鼠标来点击其中的小球,拖动到一定位置,然后使其运动起来。很想在启动时就让边缘的小球就提升到一定角度,然后能自动启动, 但Matter.js物理引擎中并没有说明怎样可以做到这一点,缺少足够的文档介绍。
在使用上述语句创建newtonsCradle后,可以加入语句:
console.log(newtonsCradle);
然后就可以在控制台中看到创建的obj结构:

其中的bodies中包含5个物体,其中的结构为:

其中每个是其中的每个小球,其中的结构为:

可以看到其中的每个小球都有一个force、position、positionImpulse、velocity等属性:
force:{x: 0, y: 0}
position:{x: 219.05568602353316, y: 299.9977706653598}
positionImpulse:{x: -0.0012203861922935905, y: 0}
velocity:{x: -0.0027169914860678546, y: -0.000010628073482621403}
可以使用其中的这些属性操作每个球的状态,以达到设置初始值的目的。比如初始化时为第一个球加入一个向左的横向力force:
function init(){
  newtonsCradle.bodies[0].force.x=-0.02;
}

可以在窗口加载时运行上述代码,所以加入代码:
window.onload = init;

Copyright@dwenzhao.cn All Rights Reserved   备案号:粤ICP备15026949号
联系邮箱:dwenzhao@163.com  QQ:1608288659