剛體(body):
通過世界建立的物件,物理引擎裡面所有東西都是剛體
建立方式:
定義乙個b2bodydef,b2world呼叫createbody的方法傳入此引數
定製器(fixture):
帶有形狀,密度,摩擦力等屬性
建立方式:
定義乙個b2fixturedef,呼叫剛體的createfixture方法為剛體建立定製器(相當於附加屬性),每個剛體支援新增多個fixture;
剛體的createfixture過載了兩種模式,一種是b2fixturedef作為引數,一種是shape作為引數,效果是一樣的。
形狀(shape):
剛體的形狀
種類:circle(圓形),polygon(多邊形),其他等等
基本上他們的範圍是這樣:world,body,fixture(剛體的多個屬性)
tips:b2vec2是2dx裡面類似cgpoint的東西
具體看**
1update方法//剛體
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);
1void 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...