初识 Box2D世界

       本文你可以初步认识下这个强大的物理引擎,你将会学到创建一个简单的Box2D应用基本流程,了解b2World物理世界,这个世界力的基本作用 --- 重力,以及如何开启Box2D调试试图。

1.1 什么是Box2D引擎

       Box2D集成了大量的物理力学和运动学的计算,并将物理模拟过程封装到类对象中,将对物体的操作,以简单友好的接口提供给开发者。我们只需要调用引擎中相应的对象或函数,就可以模拟现实生活中的加速、减速、抛物线运动、万有引力、碰撞反弹等等各种真实的物理运动。简单的说,Box2D就是一个物理刚体仿真库

1.2 创建Box2D世界

      Box2D中用 b2World 类来表示世界,他是Box2D 的核心类之一,集成了Box2D对所有对象的创建,删除,碰撞模拟的相关 接口。

12.1 重力

    重力,简单的将就是使用物体自然下落的力,Box2D 中 b2Vec2 向量类来模拟作用力,分别为 x,y 两个参数。                                  创建一个重力的代码如下:

  let gravity:Box2D.Common.Math.b2Vec2 = new Box2D.Common.Math.b2Vec2(0,9.8);

应为重力是向下的所以水平方向为: 0 。

1.2.2 创建世界

    “世界” 在 Box2D 中用 b2World 类来表示。 b2World类的构造函数中有两个参数每一个就是前面所说的重力 gravity 。

    另外一个是 doSleep的 布尔值参数 ,表示box2d 引擎是否将静止不动的刚体设置为睡眠状态。

   // 为 true 时 将静止的刚体标记为随眠状态,在遍历的时候直接跳过去,不进行运动模拟计算,提高了Box2D的计算效率,节省CPU

接下来用代码来实现一个世界

   private _world:b2World;
    // 创建物理世界
    private create2bWorld():void
    {
        let gravity:Box2D.Common.Math.b2Vec2 = new Box2D.Common.Math.b2Vec2(0,10);    // 重力 
        let doSleep:boolean = true;                                                   // 为 true 时 将静止的刚体标记为随眠状态,在遍历的时候直接跳过去,不进行运动模拟计算,提高了Box2D的计算效率,节省CPU 
        this._world = new b2World(gravity,doSleep);
    }

1.3 开启 Box2D 模拟

    每一帧基于大量的物理运动公式,计算出刚体的坐标,角度,速度等等,形成动态的物理模拟效果。 box2D已经把这个复杂的计算过程封装成 step()的函数中。 我们只需每一帧调用这个函数既可以了。

    a.   delat: 每次更新计算之间经过的时间。 2bworld.step() 时也要经过一定的时间,假设这个时间时 interval 秒(或者你可以理解成每一帧持续的时间 1/fps秒),当 delta小于 interval时,呈现出来就是慢放效果,反之则 快进效果,所以保证 delta == interval 跟重要。

    大部分游戏都是基于帧频进行的,而且在30以上才能保证流畅,所以 interval = 1/30秒.

    b. positionDelta: 取值越大,单次step()物理模拟碰撞重叠的矫正精度越高,但消耗就越大。通常为10

    c. velocityDelta:  两个不同速度运动体发生碰撞时,根据物体的质量,速度大小和方向,会重新分配,取值越大矫正越精确,消耗就越大 通常为10即可。

  private update():void
  {
      this._world.Step(1/30,10,10);
  }

    好了我们已经完美的创建了一个box2d世界.接下来就是给世界添加刚体(b2Box2d)

    

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值