物理引擎

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
    world.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_gravity
  • Solver(求解器),物理世界的solver(求解器)专门用于处理约束情况。
  • Units(单位),就是用来测量长度、时间等等数量的单位。在p2.js中,我们用 meters-kilogram-second (MKS) 为单位,用弧度作为角度单位。不要用像素做单位哦。