box2d之剛體,定製器筆記

2021-06-20 22:25:58 字數 2876 閱讀 9478

剛體(body):

通過世界建立的物件,物理引擎裡面所有東西都是剛體

建立方式:

定義乙個b2bodydef,b2world呼叫createbody的方法傳入此引數

定製器(fixture):

帶有形狀,密度,摩擦力等屬性

建立方式:

定義乙個b2fixturedef,呼叫剛體的createfixture方法為剛體建立定製器(相當於附加屬性),每個剛體支援新增多個fixture;

剛體的createfixture過載了兩種模式,一種是b2fixturedef作為引數,一種是shape作為引數,效果是一樣的。

形狀(shape):

剛體的形狀

種類:circle(圓形),polygon(多邊形),其他等等

基本上他們的範圍是這樣:world,body,fixture(剛體的多個屬性)

tips:b2vec2是2dx裡面類似cgpoint的東西

具體看**

1

//剛體

2b2bodydef testbodydef;

3 testbodydef.type =b2_staticbody;

4 testbodydef.position.set(0,0);5

6//底部的邊緣線

7b2edgeshape testshape;

8 testshape.set(b2vec2(0,0), b2vec2(s.width/ptm_ratio,0

));9

10b2fixturedef testfixtuedef;

11 testfixtuedef.shape = &testshape;

1213 b2body* testbody = world->createbody(&testbodydef);

14 testbody->createfixture(&testfixtuedef);

1516

//頂部邊緣線

17 testshape.set(b2vec2(0,s.height/ptm_ratio), b2vec2(s.width/ptm_ratio,s.height/ptm_ratio));

18 testbody->createfixture(&testfixtuedef);

1920

//左邊邊緣線

21 testshape.set(b2vec2(0,0), b2vec2(0,s.height/ptm_ratio));

22 testbody->createfixture(&testfixtuedef);

2324

//右邊邊緣線

25 testshape.set(b2vec2(s.width/ptm_ratio,0), b2vec2(s.width/ptm_ratio,s.height/ptm_ratio));

26 testbody->createfixture(&testfixtuedef);

2728

//建立可運動的缸體

29 ccpoint ballposition = ccpointmake(200, 100

);30 ccsprite* ballsprite = ccsprite::create("

ball.png");

31 ballsprite->setposition(ballposition);

32this->addchild(ballsprite);

3334

b2bodydef moveablebodydef;

35 moveablebodydef.type =b2_dynamicbody;

3637

//設定剛體位置

38//

剛體相對於世界的位置,座標轉換為box2d裡面的座標

39 moveablebodydef.position.set(ballposition.x/ptm_ratio,ballposition.y/ptm_ratio);

40//

把精靈放到b2bodydef的userdata裡面,在update裡面重新整理精靈位置

41 moveablebodydef.userdata =ballsprite;

4243 b2body *moveablebody = world->createbody(&moveablebodydef);

4445

//建立圓形小球

46b2circleshape testcircleshape;

47//

剛體和形狀設定座標的時候,選乙個就ok

48 testcircleshape.m_p.set(0,0

);49

float radius = ballsprite->getcontentsize().width/(2*ptm_ratio);

50 testcircleshape.m_radius =radius;

5152

b2fixturedef moveablefixturedef;

53 moveablefixturedef.shape = &testcircleshape;

54 moveablefixturedef.density = 1.0f

;55 moveablefixturedef.friction = 0.3f

;56 moveablebody->createfixture(&moveablefixturedef);

update方法

1

void helloworld::update(float

dt)2

18}19 }

物理引擎Box2D之剛體

剛體代表乙個質點,因此它只有位置,沒有大小。物理引擎box2d把剛體分為三種型別。1 靜態剛體。靜態剛體沒有質量,沒有速度,如果你想改變它的位置,只能通過 修改。2 稜柱剛體。稜柱剛體沒有質量,但有速度,引擎會根據速度計算並更新它的位置。3 動態剛體。動態剛體有質量也可以有速度,這是我們最常用的剛體...

box2d 剛體碰撞設定方法

box2d 剛體碰撞設定方法 fixturedef.filter.categorybits指自己所屬的碰撞種類,fixturedef.filter.maskbits指與其碰撞的種類 b2fixturedef fixturedef 注意 fixturedef.filter.categorybits 的...

BOX2D畫出較為複雜的剛體

本部落格中使用的均為cocos2d c box2d 版本是2.6 由於筆者能力有限,所以在這裡也只說明俄羅斯方塊的幾種圖元的構造,如若您需要更加複雜的東東,敬請諒解 不說了,首先建立 如下 void box2dtestlayer generate4 ccpoint p 再者建立 如下 void bo...