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