上QQ阅读APP看书,第一时间看更新
9.3 物理世界World
Box2d的World代表了整个物理世界,我们需要做的只是一些配置——需要往世界里面添加一些怎样的对象,然后让它运行起来就可以了。在游戏循环中,每一帧进行一次模拟,然后把模拟的结果渲染出来。
我们可以动态地查询World中现在某些对象的状态,也可以查询现在某个范围内有哪些对象,这些其都能做到。World的函数很多,这里只简单介绍几个适合入门读者学习的函数。
///传入一个描述来创建一个Body,这个函数不会对描述对象有任何的引用,请放心地释放它 ///这个函数在callback()函数中是被锁定的(无法在一次Step中动态创建或者销毁) b2Body* CreateBody(const b2BodyDef* def); ///释放指定的Body ///这个操作会自动释放它的所有形状以及关节 ///这个函数在callback()函数中是被锁定的(无法在一次Step中动态创建或者销毁) void DestroyBody(b2Body* body); ///创建一个关节把两个Body联系在一起 ///这个函数在回调的时候是被锁定的 b2Joint* CreateJoint(const b2JointDef* def); ///销毁一个关节,这可能造成这个关节连接的两个对象发生碰撞 ///这个函数在callback()函数中是被锁定的(无法在一次Step中动态创建或者销毁) void DestroyJoint(b2Joint* joint); ///在一个时间步内,进行物理模拟,碰撞检测,约束解决等.... ///@param timeStep要模拟的总时间长度,以秒为单位 ///@param velocityIterations速率约束求解器的迭代次数 ///@param positionIterations位置约束求解器的迭代次数 void Step( float32 timeStep, int32 velocityIterations, int32 positionIterations); ///设置全局的重力加速度 void SetGravity(const b2Vec2& gravity); ///获取全局的重力加速度 b2Vec2 GetGravity() const;