Egret-p2js学习(1)
P2.js框架是一个基于javascript语言编写的2D物理引擎
1、官方API文档:→ 传送门
2、官方中文wiki:→ 传送门
一、核心概念
1、Shape(形状),一个几何形状,可以是矩形、圆形等等
2、Body(刚体),他是一块无限坚硬的物体,因此,在这块物体上任何两点之间的距离都被认为是固定的。
Body(刚体)有自己的参数用来规定 位置、质量和速度等,刚体的形状是由Shape创建的形状确定的。
Q:三角形的实例对象该如何创建
3、Constraint(约束),constraint是一个物理连接件,用来控制刚体的自由度
在3D空间中,物理有6个自由度(3个平移坐标,3个旋转坐标);在2D平面中,物体只有3个自由度(2个平移坐标和一个旋转坐标)。
ex:3D空间中 “门” 的一侧被合页固定在墙上,它失去了另外五个自由度,只能按照合页开合方向旋转。合页就相当于一个constraint(约束)。
4、Contact constraint(接触约束),用于防止刚体之间的渗透重叠,并且可以模拟摩擦和弹性。无需创建这个约束,系统会自动创建
5、World(世界),这就是一个模拟的物理世界,所有的刚体和约束创建后都要放进来。
6、Solver(求解器),物理世界的solver(求解器)专门用于处理约束情况。
7、Units(单位),就是用来测量长度、时间等等数量的单位。在p2.js中,我们用meters-kilogram-second (MKS) 为单位,用弧度作为角度单位。不要用像素做单位!!!
二、demo
以下代码没有与Egret结合使用,也没有可视界面,只能在控制台中观察到输出信息
实例化一个物理世界
var world = new p2.world({ gravity:[0,-9.82] })
这个世界实例的重力为9.82,在y轴的负半轴方向
// 实例化刚体,重量5kg var circleBody = new p2.Body({ mass:5, //重量 position:[0,10] //位置[x,y] }) // 目前,circleBody刚体在x=0,y=10的位置上,不过他还没有形状 // 添加一个形状 var circleShape = new p2.Circle({radius:1}); circleBody.addShape(circleShape); // 至此,完成创建了一个圆形的刚体,如果现在就开始运行这个模拟世界的话,这个圆形刚体将会开始无线下坠,并且速度越来越快,
// 因为实例化world时,指定了一个9.82的重力加速度,如同真实世界。 // 所以,还需要创建一个平面来模拟地面,接住刚体 var groundShape = new p2.Plane(); var groundBody = new p2.Body({ mass:0 }) groundBody.addShape(groundShape); // 通过设置mass(重量)为0,告诉物理引擎这个刚体是静止的。这里我们没有设置它的position(位置),
// 因此它会从坐标原点开始创建这个平面。 // 在我们开始运行这个world之前,必须先把制作好的圆形刚体和地面添加到world中。 world.addBody(circleBody); world.addBody(groundBody); // 整合这个世界 setInterval(function(){ world.step(1/60); console.log("Circle x:" + circleBody.position[0]); console.log("Circle y:" + circleBody.position[1]); console.log("Circle angle:" + circleBody.angle); },1000/60); // 上面的代码输出了刚体的位置和角度
本文作者:博客园-前端法师
版权所有,转载请标明出处。