官术网_书友最值得收藏!

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;
主站蜘蛛池模板: 泽库县| 武夷山市| 耒阳市| 西和县| 仁布县| 洱源县| 乐昌市| 博爱县| 青冈县| 舟曲县| 扎鲁特旗| 黎城县| 承德县| 循化| 九龙坡区| 南靖县| 祁东县| 长宁区| 隆回县| 乌鲁木齐县| 龙陵县| 连平县| 巴马| 无锡市| 龙胜| 志丹县| 宝山区| 扎赉特旗| 汉川市| 岳池县| 永胜县| 正蓝旗| 栖霞市| 博兴县| 明溪县| 沁阳市| 溧水县| 海伦市| 晋州市| 大庆市| 探索|