小滿(bill man)個人原創,歡迎轉載,轉載請注明地址,小滿(bill man)的專欄地址http://blog.csdn.net/bill_man
在游戲中我們經常要加入物理碰撞等和物理有關的內容,在游戲中加入物理引擎可以使我們的游戲更加真實,為玩家展示一個更真實的世界,cocos2d-x支持兩個物理引擎Box2d和Chipmunk,本文介紹box2d。
Box2D?是用可移植的?C++?來寫成的。引擎中定義的大部分類型都有?b2?前綴,可以把它和我們游戲中的其他元素區分開來。
Box2d中有很多概念。
1.剛體
??即是物理學中的質點,只有位置,沒有大小,它又可以區分為以下幾類
??靜態剛體:靜態剛體沒有質量,沒有速度,只可以手動來改變他的位置
??棱柱剛體:棱柱剛體沒有質量,但是可以有速度,可以自己更新位置
??動態剛體:動態剛體有質量也有速度
物理引擎需要首先定義一個描述類,然后再根據描述類通過世界創建某個對象。創建剛體時需要有兩個步驟,一是生成一個剛體定義,二是根據剛體定義生成剛體。在剛體創建時定義中的信息會被復制,也就是說創建完成后剛體只要沒被釋放掉,就還可以重復使用。
~~~
//定義剛體
b2BodyDef?groundBodyDef;
groundBodyDef.position.Set(screenSize.width/2/PTM_RATIO,?screenSize.height/2/PTM_RATIO);
//生成剛體
b2Body*?groundBody?=?world->CreateBody(&groundBodyDef);
~~~
2.形狀
??通過關聯添加到剛體上,碰撞可以根據形狀來判定,具有摩擦和恢復等材料特性。
~~~
b2PolygonShape?groundBox;
//?bottom
groundBox.SetAsBox(screenSize.width/2/PTM_RATIO,?0,?b2Vec2(0,?-screenSize.height/2/PTM_RATIO),?0);
~~~
3.關聯
?關聯是一種附加在剛體上的屬性,一個剛體可以有多個關聯,創建關聯時,需要定義關聯的信息,然后通過剛體創建關聯,當關聯被創建時關聯定義中的信息也會被保留,也可以重用
~~~
//定義并創建關聯
b2FixtureDef?fixtureDef;
fixtureDef.shape?=?&dynamicBox;
fixtureDef.density?=?1.0f;
fixtureDef.friction?=?0.3f;
body->CreateFixture(&fixtureDef);
~~~
4.鏈接
鏈接可以聯系多個缸體,使得剛體之間相互影響,同樣的,也需要首先定義信息,之后通過世界創建鏈接,同樣的,信息也可以被保留,從而重用
另外鏈接還支持限制和馬達,限制就是限制物體運動的角度,馬達就是依照關節中的限制來約束物體
鏈接有旋轉,棱柱和距離等
~~~
b2RevoluteJointDef?rjd;
rjd.Initialize(m_attachment,?m_platform,?b2Vec2(0.0f,?5.0f));
rjd.maxMotorTorque?=?50.0f;
rjd.enableMotor?=?true;
m_world->CreateJoint(&rjd);
~~~
5.約束
??一個約束就是消除物體自由度的物理連接。在?2D?中,一個物體有?3?個自由度。如果我
們把一個物體釘在墻上(像擺錘那樣),那我們就把它約束到了墻上。這樣,此物體就只能繞著這個釘子旋轉,所以這個約束消除了它?2?個自由度。
還有一種不須你創建的接觸約束,一個防止剛體穿透,以及用于模擬摩擦和恢復的特殊約束。
6.世界
??世界是遵循物理的空間,以上的所有都存在于世界中,可以創建多個世界,但很少這樣用
創建世界需要兩個步驟,一是生成重力向量,二是根據重力生成世界對象
~~~
//生成重力向量
b2Vec2?gravity;
gravity.Set(0.0f,?-10.0f);
//生成世界對象
bool?doSleep?=?true;
world?=?new?b2World(gravity);
world->SetAllowSleeping(doSleep);
world->SetContinuousPhysics(true);
~~~
剛開始研究此引擎,如有錯誤之處,希望大家多多指正
下一篇繼續深入box2d
- 前言
- (1)--HelloWorld
- (2)--重要概念及Test例子結構
- (3)--動作(CCAction)
- (4)--觸屏事件
- (5)--動作管理
- (6)--場景間切換效果
- (7)--CCProgressTimer
- (8)--場景特效
- (9)--粒子系統
- (10)--運動中的加速度效果
- (11)--拖動間隱效果
- (12)--圖形繪制
- (13)--內存回收機制
- (14)--菜單項
- (15)--CCOrbitCamera
- (16)--LayerColor
- (17)--瓦片地圖集
- (18)--Lable
- (19)--物理引擎box2d(1)
- (20)--物理引擎box2d(2)
- (21)--精靈類
- (22)--動畫類
- (23)--其他(屏幕旋轉,schedule,系統語言)
- (24)--音樂音效
- (25)--CCRenderTexture
- (26)--其他(游戲存檔,切換高清,圖片處理)
- (27)--CCMutableArray
- (28)--CCTMXTiledMap
- (29)-cocosBuilder
- (30)2.1新特性之CCClippingNode
- (31)2.1新特性CCPhysicsSprite
- (32)-cocos2d-x & javascript跨平臺初體驗