Chipmunk
Chipmunk要求
Chipmunk要求多边形定点数据必须是按照顺时针方向,且必须是凸多边形。
p2.js
核心概念
Shape(形状):一个几何形状,可以是矩形、圆形等等。
Body(刚体):它是一块无限坚硬的物体。因此,在这块物体上任何两点之间的距离都被认为是固定的。Body(刚体)有自己的参数用来规定位置、质量和速度等,刚体的形状是由Shape创建的形状确定的。
刚体有三种类型:
Body.DYNAMIC:可以与任何类型的刚体交互,可以移动Body.STATIC:不可以移动,但是可以与 dynamic类型刚体交互Body.KINEMATIC:通过设置速度来控制,其他方面则和Static刚体相同
Constraint(约束):constraint 是一个物理连接件,用来控制刚体的自由度。在2d世界,物体只有3个自由度(2个平移坐标和1个旋转坐标)。众所周知,人类世界是3d的,因此我们家里的门本来应该是有6个自由度的,但是由于门的一侧被门铰链固定在墙上,它失去了另外5个自由度,只能照着门铰链这个轴旋转了。门铰链就相当于一个constraint(约束)。
World(世界):这就是一个模拟的物理世界,所有的刚体和约束创建后都要放进来。
通过
world.gravity,你可以设置和获得当前的重力向量1
2
3
4
5
6
7
8
9
10world.gravity[0] = 0; // x
world.gravity[1] = -9.82; // y
p2.vec2.set(world.gravity,0,-9.82);
world.applyGravity = false; // off掉全局重力
// 手工给刚体加重力
var gravity = p2.vec2.fromValues(0,-9.82),
gravityForce = p2.vec2.create();
p2.vec2.scale(gravityForce,gravity,body.mass); // F_gravity = m*g
p2.vec2.add(body.force,body.force,gravityForce); // F_body += F_gravitySolver(求解器):物理世界的solver(求解器)专门用于处理约束情况。
Units(单位):就是用来测量长度、时间等等数量的单位。在p2.js中,我们用 meters-kilogram-second (MKS) 为单位,用弧度作为角度单位。不要用像素做单位哦。