Box2D基本概念的学习记录
Box2D基本概念的学习记录原文地址
关于Box2D
Box2D 是一个用于游戏的 2D 刚体仿真库。程序员可以在游戏中使用它,让物体的运动更加可信,让世界看起来更具交互性。从游戏引擎的视角来看,物理引擎就是一个为程序化动画 (procedural animation)的系统。Box2D是用C++开发的一款物理引擎, 而本文用的是Box2dWeb,即Box2D的JS版本。
一些基本概念Box2D使用了一些基本的对象来定义和模拟游戏世界。最重要的几个对象如下:* World(世界):最主要的Box2D对象, 包括了所有的世界对象并模拟着游戏的物理行为。* Body(刚体): 刚体可以由一个或多个通过设备附属在刚体上的形状组成。* Shapes(形状): 一个二维形状,如圆形或多边形, 这些是用于Box2D内的基础形状。* Fixture(设备): 将一个形状附属在一个刚体上,用于碰撞检测。设备持有额外的,非几何的数据,如摩擦,碰撞和滤器。* Joint(关节):用来将两个刚体以不同的方式限制在一起。比如,一个转动关节限制两个刚体共享一个共同的节点,同时它们可以通过这个节点自由的旋转。
计算单位系统Box2D的所有计算使用米制系统, 而我们在绘图时使用的是像素, 因此需要建立一个米到像素的映射, 通常使用30像素代表1米。
创建世界的步骤- 创建重力系数,重力系数通过b2Vec来创建, 接收两个参数,代表x和y的值。设置是否允许睡眠,即当刚体处于空闲时,是否可以被排除计算。处于空闲的刚体,可以被碰撞唤醒。###一个简单的定义如下
world.Step接收3个参数: 每次计算的时间片, 速度约束求解器迭代次数, 位置约束求解器迭代次数。后面2个参数和数学的积分器相关, 看不懂也无关紧要, 我们根据Box2D的文档, 设置建议数值8和3就行了。Box2D内部使用了积分器算法进行计算。积分器在每个不同的时间点内模拟计算物理公式。 时间步长则是我们想要Box2D要模拟计算的总时间。在这里,我们设置了1/60秒, 则也是官方文档建议的数值。
总结Box2D将一个游戏映射为一个世界, 当然可以有很多的世界,不过没有太多的必要。世界本身具有重力,一个世界拥有许多的刚体, 而刚体又拥有形状。形状则被设备持有,设备拥有各种系数,包括摩擦,密度,恢复等,刚体之间又可以通过关节连接。而这个世界中的一切运作都通过Box2D自动计算。Box2D帮助我们从复杂的数学和物理公式中脱离出来, 让我们将更多的精力放在了游戏逻辑上。游戏开发者就像是一个创始者,创造了一个世界,并设置了相关的参数,接着将Box2D丢入这个世界中, 这个世界就开始了生生不息的循环运作。