Box2d学习笔记三:box2d中几个重要的类
我們已經知道box2d中的唯一物種:剛體,然而僅僅一個剛體對象并不能完成相應的物理模擬。如果看過box2d的幫助文檔就知道,b2Body中提供的函數和屬性中,并沒有我們需要的物理屬性,可以回憶一下,我們讀高中那會兒,上知天文下知地理,那些物理量到現在還能記住一些。
為了很好的模擬現實的物理世界,box2d中當然會提供各種物理量,而這些物理量表現了剛體的各種性質,比如:摩擦力,恢復系數,力,扭矩等等,與高中不同的是,我們現在不需要那筆去計算什么什么運動軌跡,運動狀態,因為這些box2d會很好的幫我們計算了,我要做的是,了解各物理量并合適的設置他們,其它的交給物理引擎吧!
打開box2d幫助文檔,發現b2Body中并沒有提供相應的物理量,細心的人們會發現,里面有很多得到類的函數,這些類之前并沒有見過。下面就來介紹這些重要的類,就是他們完成了在box2d中的物理屬性設置。
框架(b2Fixture):封裝了物理屬性,用來完成各種物理模擬。
| b2Fixture?*? | CreateFixture?(const?b2FixtureDef?*def) 這是b2Body的方法,創建之后就表示該剛體有了框架,同框架的屬性也是他的了。注意(可以創建多個框架) |
關節(b2Joint):用來連接剛體,對剛體的運動做限制。(可以聯系人體的關節,有了關節,兩塊骨頭就不能胡亂運動了)
Ok,靠他們就能完成box2d中的各種物理模擬了,下面是練習的代碼:
上節中我們已經創建了世界和邊界,所以這里就直接寫出關鍵代碼了。
//創建剛體
b2BodyDef bodyDef1;
bodyDef1.position.Set(size.width/2/PTM_RATIO,size.height/2/PTM_RATIO);
bodyDef1.type=b2_dynamicBody; //設置剛體為動態的
b2Body *body1=world->CreateBody(&bodyDef1);
現在運行程序,并不能看到剛體,因為它還沒有形狀,只是知道世界中有一個剛體了,需要框架為它附加形狀,所以先創建形狀:
//使用多邊形
b2PolygonShape shape1;
shape1.SetAsBox(50.0f/PTM_RATIO,50.0f/PTM_RATIO);
為了節約時間,這里就用了最簡單的方式,創建了一個矩形,當然引擎中還提供了其它形狀,可以查看幫助文檔。
光有形狀還不行,形狀需要一個承載它的實體,它就是框架:
b2FixtureDef fixtureDef1;
fixtureDef1.shape=&shape1;? //在這里就把形狀和框架聯系起來了
fixtureDef1.density=1.0f;
fixtureDef1.friction=0.2f;
fixtureDef1.restitution=0.8f;
最后創建框架:
body1->CreateFixture(&fixtureDef1);
OK,現在就能看到剛體了,受重力作用,做自由落體運動。
總結
以上是生活随笔為你收集整理的Box2d学习笔记三:box2d中几个重要的类的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 浙工大校园网连接
- 下一篇: Ios 24小时制与12小时制