精通Cocos2d-x游戏开发(进阶卷)
上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;