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编译

相关文章
相关标签/搜索