- 精通Cocos2d-x游戲開發(fā)(進(jìn)階卷)
- 王永寶
- 593字
- 2020-11-28 22:37:08
10.3 Box2d的調(diào)試渲染
Box2d只是一個(gè)物理引擎,本身并不提供顯示功能,只提供物理模擬的功能,因此可以很方便地運(yùn)用到那些2D游戲引擎當(dāng)中,在Box2d引擎的代碼中,提供了TestBed這個(gè)龐大的范例庫(kù)。
在TestBed中,GLUT完成了物理場(chǎng)景的渲染,以及其他的一些輸入和輸出的工作,那么在Cocos2d-x中,對(duì)Box2d的TestBed略加修改就可以搬到TestCpp里面了。
Box2d雖然不支持渲染,但提供了一個(gè)用于調(diào)試的渲染接口,在libBox2d項(xiàng)目的Common目錄下的b2Draw提供了繪制點(diǎn)、線、圓、多邊形等的接口,根據(jù)傳入的參數(shù),使用OpenGL的接口繪制它們,cpp-tests的Box2DTestBed中,GLESRender實(shí)現(xiàn)了這個(gè)功能。
需要注意的一點(diǎn)是,TestBed渲染的內(nèi)容是Debug Draw,而不是Game Draw,它僅僅只是一些點(diǎn)、線、圓而已(繪制的是調(diào)試內(nèi)容,而不是游戲內(nèi)容)。這套流程跟cpp-tests的Box2dTest不太一樣。
不管是在Box2d的TestBed還是Cocos2d-x的Box2dTestBed,它們的b2Draw對(duì)象的實(shí)現(xiàn)都在很好的工作,并且以后應(yīng)該也不會(huì)修改到這部分的代碼,在這里介紹如何使用OpenGL來(lái)繪制點(diǎn)、線、圓之類并不是很恰當(dāng),所以關(guān)于DebugDraw的渲染,我們只介紹它們是如何工作的,而不討論渲染的細(xì)節(jié)。
首先需要實(shí)現(xiàn)b2Draw接口,把它叫作GLESRender,并且需要有一個(gè)這個(gè)類的對(duì)象,通過(guò)World→SetDebugDraw(myDebugDraw);然后將它賦給World,接下來(lái),在每一幀模擬完物理世界之后,調(diào)用World→DrawDebugData()。
在每次調(diào)用DrawDebugData()函數(shù)的時(shí)候,Box2d都會(huì)根據(jù)當(dāng)前世界的所有對(duì)象的形狀等信息,調(diào)用b2Draw對(duì)象的繪圖函數(shù)來(lái)渲染。如果希望在Cocos2d-x中顯示調(diào)試信息,來(lái)幫助確定物理對(duì)象的顯示與實(shí)際的物理形狀是否一致,可以使用cpp-tests中Box2dTestBed示例的GLES-Render.h和GLES-Render.cpp文件,將GLESDebugDraw設(shè)置為物理世界的調(diào)試渲染對(duì)象。
- 電子產(chǎn)品制作工藝與操作實(shí)訓(xùn)
- 電子線路
- 圖解電子技術(shù)速學(xué)速用
- 現(xiàn)代交換原理
- 信號(hào)與系統(tǒng)習(xí)題指導(dǎo)
- 射頻微波電路設(shè)計(jì)
- 手繪圖說(shuō)數(shù)字電路圖
- 快修巧修新型手機(jī)(修訂版)
- 創(chuàng)客電子入門
- 現(xiàn)代電力電子學(xué)
- 移動(dòng)基站設(shè)備與維護(hù)(第2版)
- 如影隨形:無(wú)處不在的無(wú)線電波
- 現(xiàn)代交換技術(shù)實(shí)用教程
- 智能光網(wǎng)絡(luò)運(yùn)行維護(hù)管理
- 現(xiàn)代移動(dòng)通信技術(shù)與系統(tǒng)(第2版)