1. 程式人生 > >cocos2d-x之物理引擎box2d(2)

cocos2d-x之物理引擎box2d(2)

小滿(bill man)個人原創,歡迎轉載,轉載請註明地址,小滿(bill man)的專欄地址http://blog.csdn.net/bill_man

由於box2d的內容比較多,它也有自己的testbed例子,所以關於比較深入的box2d引擎內容,我準備單開一個專題去研究它的testbed例子,當然,是嵌入到我們的cocos2d中的testbed,因為box2d本身就是用C++編寫的,所以區別不是很大。

首先看一下box2dtest這個例子,這個例子相對簡單


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


第一步當然是構建整個世界,正如上一節所說的,建立重力,通過重力構建生成世界,當然,這也是使用這個引擎new

構建為數不多地方,因為有世界才有一切

第二步就是構建地面及牆壁,這裡面的做法略有不同,因為要構建一個空心的物體,因此我們不能直接定義,而是分別定義長方體裡的四個邊。

另外一個需要注意的地方就是我們進行了長度的轉換,由於box2d採取的現實世界的米作為計量長度的單位,這裡要注意的是長度範圍在0.1m10m範圍內的物體模擬的效果更好,所以我們要把我們的畫素級的長度單位轉換為米的單位就要除以PTM_RATIO(定義32畫素為1米)。

需要說明的是,這裡我對例子進行了修改,例子是以螢幕的中心為錨點,而我,是以原點為錨點的,我覺得這樣更好理解。



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


可以看到型別是動態剛體,另外值得注意的就是用userData這個引數保留了我們的物件,從而完成了物件和剛體的繫結

之後再繫結形狀,先生成形狀,在通過關聯來繫結形狀


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


關於物理引擎的深入研究,我想再開一個系列的文章來單獨談,因為這個的例子寫的也很好,對不同型別遊戲的開發都很有用

剛開始研究此引擎,如有錯誤之處,希望大家多多指正

下一篇打算寫精靈類的深入研究

相關推薦

cocos2d-x物理引擎box2d(2)

小滿(bill man)個人原創,歡迎轉載,轉載請註明地址,小滿(bill man)的專欄地址http://blog.csdn.net/bill_man 由於box2d的內容比較多,它也有自己的testbed例子,所以關於比較深入的box2d引擎內容,我準備單開一個專題去研

Cocos2d-x物理引擎使用入門

相關概念 什麼是物理引擎? 科學模型:科學研究中對事物的合理簡化。 物理引擎是一個計算機程式模擬牛頓力學模型,使用質量、速度、摩擦力和空氣阻力等變數。 可以用來預測這種不同情況下的效果。它主要用在科學模擬和電子遊戲中。 一般,物理引擎只負責物理計算,而不進行畫面渲染。

Cocos2d-x教程(17)-Box2D 物理引擎

 歡迎加入 Cocos2d-x 交流群: 193411763 轉載時請註明原文地址: 物理引擎並非每款遊戲的必需品,但它卻可以更好的模擬現實世界的真實感。 此篇文章我們將初步講解Box2D的使用方法。 想要精通Box2D並非簡單的事情,但簡單的使用Box2D卻

cocos2d-x碼農工作筆記 CCNode常用函式(2.0.4)

//版本cocos2d-x2.0.4 CCNode* node =CCNode::create();//生產一個CCNode*     node->getZOrder();//獲取節點繪製的順序     node->getPosition();//獲取節點在

Cocos2d-xLUA指令碼引擎深入分析

 另:本章所用Cocos2d-x版本為:          大家好,又是一週過去了,這一週忙的有點焦頭爛額,除了工作照例每天加班到九點外,工具箱又做了大幅改進,新的論壇遊戲兔子game2z也上線了,Cocos2d-x的學習時間被壓縮的很少了,現在是凌晨一點零六分,看著妻子睡熟的樣子,我也只能告訴自已

5.27:cocos2d-x初探學習筆記(2)--重要概念及Test樣例結構(轉)

這樣的 發生 菜單 add css 基礎 dsm 人的 添加 1.幾個重要概念 在cocos2d引擎中,有幾個概念,各自是導演。場景,布景和人物角色。 導演(CCDirector):在cocos2d-x引擎中,導演類是遊戲的組織者和領導者。導演制定規則讓遊戲內的場

cocos2d-x淺析Hello World

source child 核心 內容 creat 哪些 項目 恢復 精靈sprite ***************************************轉載請註明出處:http://blog.csdn.net/lttree*****************

[寒江孤葉丶的Cocos2d-x旅_33]RichTextEx一款通過HTML標簽控制文字樣式的富文本控件

ast number blink js版本號 領取 size 創建 sub require RichTextEx一款通過HTML標簽控制文字樣式的富文本控件 原創文章,歡迎轉載。轉載請註明:文章來自[寒江孤葉丶的Cocos2d-x之旅系列] 博客地址

Cocos2d-xCCTouchDispatcher事件分發

使用過CCLayer的都應該知道,CCLayer的眾多父類中有CCTouchDelegate這麼一個類,他使CCLayer能接收touch事件成為可能。cocos2d-x的touch事件是由CCTouchDispatcher這個touch分發器類來進行派發的,所有需要接收to

Cocos2d-x下載安裝和配置

一、下載 1.Cococs2d-x下載地址 推薦下載cocos2d-x-v3.10版本,自帶建立專案的cococs軟體,就不用在cmd中敲命令了(不過敲命令還是顯得高大上一些)。 2.Android NDK和Android SDK的下載地址: 在

【玩轉cocos2d-x十二】plist解析工具:Anti_TexturePacker

之前拿了一些別人的圖片素材,是用TexturePacker打包合成的,結果寫程式的時候不知道每個合成前小png圖的名字是什麼,只能一個一個從plist檔案中找,然後猜測對應的名字,再進行顯示,如果不對,

【玩轉cocos2d-x三十九】Cocos2d-x 3.0截圖功能整合

3.0的截圖和2.x的截圖基本上相同,都是利用RenderTexture來處理,在渲染之前呼叫call函式,然後呼叫Cocos的場景visit函式對其進行渲染,渲染結束後呼叫end函式即可。只是3.0截圖需要在截完屏的下一幀才能處理RenderTexture,這點要注意。關

【玩轉cocos2d-x二十六】資料結構CCDictionary

CCDictionary在cocos2d-x中被大量的應用,比如CCTexureCache,CCSpriteFramCache等等。 1.實現原理 1.1.uthash CCDiction

【玩轉cocos2d-x三十四】繪圖:CCDrawingPrimitives和CCDrawNode

最近忙出翔了,這年過的也揪心。好久沒來更新部落格了,今天就來寫一寫cocos2d-x中圖形的繪製。 1.概述 其實cocos2d-x封裝了大量的opengl的繪圖函式,我們可以很輕鬆的在遊戲

【玩轉cocos2d-x三十】點九圖和輸入框的使用

登入介面一個帳號/密碼輸入框或者主角命名框是少不了的。這節就來了解一下點九圖的輸入框的使用。這裡只是介紹基礎知識,並不進行平臺的移植,也不處理跨平臺可能出現的問題。 1.點九圖CCScale9S

【玩轉cocos2d-x二十九】利用CCClipingNode做遊戲遮罩

新手引導是遊戲中必備的(除了奇葩的MT用一段動畫開始),也是玩家對遊戲的第一印象,重要性不言而喻。一般採用的遮罩的形式來突出引導重點,同時遮蔽其他功能。這裡簡單的介紹一下游戲遮罩的實現,並給出一個

【玩轉cocos2d-x二十二】多執行緒和同步02-售票

pthread有很多不同應用,官網都有相應的API解釋和Sample,這裡不再重複,本文主要介紹一個cocos2d-x多執行緒和同步示例。 1.售票 孫鑫老師的C++和Java多執行緒售票一直讓

【玩轉cocos2d-x二十三】多執行緒和同步03-圖片非同步載入

cocos2d-x中和Android,Windows都一樣,如果在主執行緒中處理一些耗時操作,那麼主執行緒就會出現阻塞現象,表現在介面上就是卡住,未響應等情況。為了避免這種情況的出現,我們需要在後

【玩轉cocos2d-x四十】如何在Cocos2d-x 3.0中使用opengl shader?

有小夥伴提出了這個問題,其實GLProgramCocos2d-x引擎自帶了。完全可以直接拿來用。先上圖吧。使用opengl前後的對比: 1.在cpp中使用openGL shader。 (1)新

【玩轉cocos2d-x三十七】粒子系統的載入優化

Cocos2d-x的粒子系統是通過載入plist生成的。plist包含兩部分內容:粒子系統屬性和粒子紋理。然而每次呼叫create都會對plist進行讀取解析,如果重複地使用同一個粒子效果,這樣的呼叫明顯是低效冗餘的。所以我們要做的是,將粒子系統屬性和粒子紋理分別抽出。 (