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