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); // 上面的代码输出了刚体的位置和角度

猜你喜欢

转载自www.cnblogs.com/webfs/p/12922210.html
今日推荐