物理模拟引擎专注于模拟现实世界中物体以及物体之间的基本运动规律。在游戏中引入物理引擎能提高游戏的真实性和可玩性,如《愤怒的小鸟》中小鸟弹出的抛物线运动、《割绳子》中割后的运动等等。既然是在游戏中引入物理引擎那就设计到物理引擎和游戏引擎之间的交互,看看书中的图:
上图反应的就是用户、渲染世界(游戏引擎)、物理世界(物理引擎)三者的交互关系。用户通过操作游戏引擎中的精灵、菜单等等渲染世界中的元素;游戏引擎再将相关数据给物理世界,物理世界模拟计算后的结果 传递个渲染世界以便重新绘制精灵等等对象。在此过程中两个世界将根据各自的运转周期独立运转,而物理世界中这个重要运转周期叫:时间步。
关键组成
物理引擎考虑现实的需要将现实世界做了简化和抽象。
物理世界b2World:由具有刚体属性的物体以及物体上的框架形状等等组成,它还包含了物理世界的重力向量;
物体b2Body:由具有位置、角度、阻尼等属性组成的刚体。而根据运动状态又可分为:
静态物体(b2_staticBody): 速度和质量为零的物体,一般不参与碰撞检测;
平台物体(b2_kinematicBody):按固定轨迹运动,质量为零的物体,一般不参与碰撞检测;
动态物体(b2_dynamicBody):通常根据重力以及施加的外力(如扭矩torques、冲量impulses)运动的物体。
框架b2Fixture:连接物体和形状的对象,并具有物体的质量、密度、摩察系数等等重要数据,有了这些数据才能有效的模拟物体的运动;
形状:形状是物体的简化表示,表示碰撞检测的边界。它依附于框架,一个框架只能连接一个形状。Box2D提供圆形(b2CircleShape)和多边形(b2PolygonShape);
关节b2Joint:用于连接两个物体,限制物体的运动。关节有两个重要的属性:
关节限制(joint limit):限制运动的范围;
关节马达(joint motor):驱动一个连接物体的运动。
在物体、框架和关节中提供用户数据的属性,它的类型void指针。也就是这个void指针将物理世界和渲染世界提供了数据交互的通道。