Box2D 是一款非常著名的2D物理引擎,主要用於2D剛體的模擬,有C++、Flash、Java等版本,可以讓物體的運動更加可信,其實就是一個類比現實世界的系統,讓你看到的情形更現實很接近。就像特球就會加速下落,物體碰撞就會改變方向,速度等類比。下面這個圖就是一個執行個體,小球在紅色框裡面運動,會自由下落,和其他小球碰撞會發生碰撞反應:貼兩個圖,小球在紅色框內運動
任何一個平台的開發和引擎的使用,我們都得明白他給我們帶來了什麼抽象,也就設計者要傳達給我的概念,如果我能站在設計者角度去想問題,我們自然就知道這個是什麼東西,要怎麼樣讓他跑起來,用這種思維我們來看box2d這個引擎,在瞭解設計者給我們的抽象之前,我們來想想這樣的一個系統做了什麼,需要什嗎?類比物理世界這就是他的一個總的目的,要做到這個目的,我們需要管理所有的物體,這個類就是box2d裡面的World,還需要很多物體,就是Body,這些類對這個引擎最重要的屬性就是一些與物理有關的東西,位置,形狀,摩擦力,彈性等。而與電腦編程其他組件會有牽扯到關係,也就位置和形狀,因為這個兩樣東西就決定在使用者面前將展示的是什麼東西。一般,我們建立一個將在螢幕上啟動並執行類時,都會有這兩個屬性:位置和形狀,所以,這裡可以簡單得到第一個抽象,使用box2d之後,位置,和形狀是要傳遞給box2d引擎的,之後,我們就不需要去update位置信心,而是直接用box2d處理之後的位置資訊來繪圖。這裡跟著有來了第二個問題,就是box2d引擎處理,就box2d的一個執行權的問題,結合剛才說,我們可以理解成box2d其實就是在改變我對象的位置資訊而已,自然我們就會理所當然把他放到View.invalidate()前面,box2d調整好位置資訊後,繪圖,這樣我們就可以在螢幕上看到類比物理世界的效果。下面附上本人開發的一個jbox2d(android)例子,希望給在學習的一個思路。
代碼地址:http://download.csdn.net/detail/lover_fuping/4281173