Box2d系列 – 如何在cocos2d-x中激活 debug draw(轉)

本文的讀者要求是, 熟悉cocos2d-x流程, 熟悉box2d的基本代碼。函數

好久沒寫cocos2dx的東西了,最近比賽接近,作題太鬱悶就練習下使用box2d,好歹也發時間看完了官方文檔的。。
原本很想發時間寫一些關於Box2d的基礎的,可是我怕我寫很差,內容太多太多了。
因此,本身學到什麼就寫什麼吧。ui

box2d是個物理引擎, 因此物體應當由幾何圖形構成,若是咱們開始寫就是用材質貼圖的話, 可能會影響咱們的效率,因此我建議是,
先構建好完整的物理系統,而後將再使用CCsprite綁定到b2body的userdata上去,只需加東西修改便可。
避免了煩瑣的過程。spa

首先咱們須要拷貝
GLES-Render.cpp
GLES-Render.h到咱們工做的目錄,
這個兩個文件能夠在coco2d-x的示例代碼中的tests\Box2DTestBed中能夠找到。debug

這裏麪包含了一個GLESDebugDraw類繼承與b2Draw類,
b2Draw類中大多數關於繪製幾何圖形的抽象方法,據我瞭解,在b2world中新出現一個剛體的形狀時就會調用這些抽象方法。
而這個GLESDebugDraw的做用就是使用opengl將這些抽象方法實實在在的繪製出來。code

具體如何操做了。
以一個簡單的項目爲例子,咱們新建一個帶box2d的cocos2dx項目。
咱們新建BoxLayer.h 繼承於 CClayer繼承

#ifndef __BOX_LAYER_H__ #define __BOX_LAYER_H__ #include "cocos2d.h" #include "Box2D/Box2D.h" #include "GLES-Render.h" //這裏包含 #define PTM_RATIO 32 class BoxLayer : public cocos2d::CCLayer {  public: 	b2World * world;     //物理世界 	GLESDebugDraw *debugDraw;    //這裏新建示例 	virtual bool init();  
	static cocos2d::CCScene * scene(); 	void update(cocos2d::ccTime dt);   //這個是控制box2d世界的刷新器 	void draw();    //這裏須要一個關鍵的draw函數, 	LAYER_NODE_FUNC(BoxLayer); }; #endif // __HELLOWORLD_SCENE_H__

而後在BoxLayer.cpp中實現一些cocos2d-x的基本方法,
其中draw方法代碼以下 , 具體細節不討論。ip

void BoxLayer::draw() { 	glDisable(GL_TEXTURE_2D); 	glDisableClientState(GL_COLOR_ARRAY); 	glDisableClientState(GL_TEXTURE_COORD_ARRAY);  
	world->DrawDebugData();   //這個必定要寫  
	glEnable(GL_TEXTURE_2D); 	glEnableClientState(GL_COLOR_ARRAY); 	glEnableClientState(GL_TEXTURE_COORD_ARRAY);	}

而後在init添加代碼以下文檔

debugDraw = new GLESDebugDraw(PTM_RATIO);   //這裏新建一個 debug渲染模塊 		world->SetDebugDraw(debugDraw);    //設置 		uint32 flags = 0;   
		flags += b2Draw::e_shapeBit ; 		//b2Draw::e_centerOfMassBit; //獲取須要顯示debugdraw的塊 		//b2Draw::e_aabbBit; //AABB塊 		//b2Draw::e_centerOfMassBit; 物體質心 		//b2Draw::e_jointBit; //關節 		//b2Draw::e_shapeBit; 形狀 		debugDraw->SetFlags(flags);   //須要顯示那些東西 		draw();   //畫出來

編譯運行咱們就能夠在沒有貼圖的狀況下看到東西了,

可是debugdraw功能要比咱們想象的強大的多,他會根據物體的不一樣的狀態顯示不一樣的顏色,是debug的好幫手啊。
詳情能夠參看box2d的官方文檔,裏面有不少關於debugdraw的介紹。it

 

來自:http://www.ipplelife.com/?p=713編譯

相關文章
相關標籤/搜索