初识 Box2D世界
? ? ? ?本文你可以初步認識下這個強大的物理引擎,你將會學到創建一個簡單的Box2D應用基本流程,了解b2World物理世界,這個世界力的基本作用 --- 重力,以及如何開啟Box2D調試試圖。
1.1 什么是Box2D引擎
? ? ? ?Box2D集成了大量的物理力學和運動學的計算,并將物理模擬過程封裝到類對象中,將對物體的操作,以簡單友好的接口提供給開發者。我們只需要調用引擎中相應的對象或函數,就可以模擬現實生活中的加速、減速、拋物線運動、萬有引力、碰撞反彈等等各種真實的物理運動。簡單的說,Box2D就是一個物理剛體仿真庫
1.2?創建Box2D世界
? ? ??Box2D中用 b2World 類來表示世界,他是Box2D 的核心類之一,集成了Box2D對所有對象的創建,刪除,碰撞模擬的相關?接口。
12.1 重力
? ? 重力,簡單的將就是使用物體自然下落的力,Box2D 中 b2Vec2 向量類來模擬作用力,分別為 x,y 兩個參數。? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 創建一個重力的代碼如下:
let gravity:Box2D.Common.Math.b2Vec2 = new Box2D.Common.Math.b2Vec2(0,9.8);應為重力是向下的所以水平方向為: 0 。
1.2.2 創建世界
? ? “世界” 在 Box2D 中用 b2World 類來表示。 b2World類的構造函數中有兩個參數每一個就是前面所說的重力 gravity 。
? ? 另外一個是 doSleep的 布爾值參數 ,表示box2d 引擎是否將靜止不動的剛體設置為睡眠狀態。
? ?// 為 true 時 將靜止的剛體標記為隨眠狀態,在遍歷的時候直接跳過去,不進行運動模擬計算,提高了Box2D的計算效率,節省CPU
接下來用代碼來實現一個世界
private _world:b2World;// 創建物理世界private create2bWorld():void{let gravity:Box2D.Common.Math.b2Vec2 = new Box2D.Common.Math.b2Vec2(0,10); // 重力 let doSleep:boolean = true; // 為 true 時 將靜止的剛體標記為隨眠狀態,在遍歷的時候直接跳過去,不進行運動模擬計算,提高了Box2D的計算效率,節省CPU this._world = new b2World(gravity,doSleep);}1.3 開啟 Box2D 模擬
? ? 每一幀基于大量的物理運動公式,計算出剛體的坐標,角度,速度等等,形成動態的物理模擬效果。 box2D已經把這個復雜的計算過程封裝成 step()的函數中。 我們只需每一幀調用這個函數既可以了。
? ? a.? ?delat: 每次更新計算之間經過的時間。 2bworld.step() 時也要經過一定的時間,假設這個時間時 interval 秒(或者你可以理解成每一幀持續的時間 1/fps秒),當 delta小于 interval時,呈現出來就是慢放效果,反之則 快進效果,所以保證 delta == interval 跟重要。
? ? 大部分游戲都是基于幀頻進行的,而且在30以上才能保證流暢,所以 interval = 1/30秒.
? ? b. positionDelta: 取值越大,單次step()物理模擬碰撞重疊的矯正精度越高,但消耗就越大。通常為10
? ? c. velocityDelta:? 兩個不同速度運動體發生碰撞時,根據物體的質量,速度大小和方向,會重新分配,取值越大矯正越精確,消耗就越大 通常為10即可。
private update():void{this._world.Step(1/30,10,10);}? ? 好了我們已經完美的創建了一個box2d世界.接下來就是給世界添加剛體(b2Box2d)
? ??
總結
以上是生活随笔為你收集整理的初识 Box2D世界的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 启动jar 日志输出
- 下一篇: 程序员如何明确职业与人生的目标