小滿(bill man)個人原創,歡迎轉載,轉載請注明地址,小滿(bill man)的專欄地址http://blog.csdn.net/bill_man
由于box2d的內容比較多,它也有自己的testbed例子,所以關于比較深入的box2d引擎內容,我準備單開一個專題去研究它的testbed例子,當然,是嵌入到我們的cocos2d中的testbed,因為box2d本身就是用C++編寫的,所以區別不是很大。
首先看一下box2dtest這個例子,這個例子相對簡單

就是可以點擊屏幕,在屏幕中生成方塊,然后方塊之間有碰撞,就這么簡單,但是帶出了整個cocos2d-x的框架。

第一步當然是構建整個世界,正如上一節所說的,建立重力,通過重力構建生成世界,當然,這也是使用這個引擎new構建為數不多地方,因為有世界才有一切
第二步就是構建地面及墻壁,這里面的做法略有不同,因為要構建一個空心的物體,因此我們不能直接定義,而是分別定義長方體里的四個邊。
另外一個需要注意的地方就是我們進行了長度的轉換,由于box2d采取的現實世界的米作為計量長度的單位,這里要注意的是長度范圍在0.1m到10m范圍內的物體模擬的效果更好,所以我們要把我們的像素級的長度單位轉換為米的單位就要除以PTM_RATIO(定義32像素為1米)。
需要說明的是,這里我對例子進行了修改,例子是以屏幕的中心為錨點,而我,是以原點為錨點的,我覺得這樣更好理解。

之后使用批處理精靈類管理所有的盒子,先生成格子的定義,在通過定義生成物體

可以看到類型是動態剛體,另外值得注意的就是用userData這個參數保留了我們的對象,從而完成了對象和剛體的綁定
之后再綁定形狀,先生成形狀,在通過關聯來綁定形狀

在初始化方法里調用scheduleUpdate()使得模擬出每個時間步更新,并在update中進行更新,如下圖所示。Box2d是通過定期調用step來更新動畫的,step的第一個參數是時間步,這里我進行了修改,因為dt會不同,所以不建議用dt來作為時間步,而要給他一個固定的時間步這樣才不會顯得動畫時快時慢,第二個參數是速度迭代次數,推薦8次,超過10次的基本看不出效果的提升,第三個參數是位置迭代,這個1次就行,底下的步驟就是遍歷整個世界,找出對應精靈的剛體,進行位置更新就可以了

關于物理引擎的深入研究,我想再開一個系列的文章來單獨談,因為這個的例子寫的也很好,對不同類型游戲的開發都很有用
剛開始研究此引擎,如有錯誤之處,希望大家多多指正
下一篇打算寫精靈類的深入研究
- 前言
- (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跨平臺初體驗