- 精通Cocos2d-x游戲開發(進階卷)
- 王永寶
- 514字
- 2020-11-28 22:37:07
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;