码迷,mamicode.com
首页 > 其他好文 > 详细

开启BOX2D引擎的调试绘图功能

时间:2015-04-15 18:45:51      阅读:320      评论:0      收藏:0      [点我收藏+]

标签:

  在做物理游戏的时候,需要用到调试绘图的功能。但我在实际操作中还是遇到了一些麻烦的,在此总结一下,以备后用。

  在BOX2D中提供了一个b2Draw类,里面包含了许多绘制方法(好像有很多虚函数接口,需要实现的)。姑且把这个类及其子类的对象看成一个绘制模块,通过让“世界”加载并调用该模块来实现调试绘制功能。

  详细的步骤如下:

  1.复制GLES-Render.h和GLES-Render.cpp两个文件到Classes目录下

  GLESDebugDraw继承自b2Draw类,实现了一部分绘制接口。而GLESDebugDraw类就定义在这两个文件中。不过cocos2d-x引擎没有提供该头文件,因此需要手动复制并引入。可以在cocos2d-x的Box2DTestBed示例项目里面找到这两个文件。

  2.创建GLESDebugDraw类对象(绘制模块),并设置其绘制标识(flag),然后将绘制模块加载到“世界”中

    GLESDebugDraw *debugDraw = new GLESDebugDraw(PTM_RATIO);
uint32 flags
= 0; flags += b2Draw::e_shapeBit; //flags += b2Draw::e_jointBit; //flags += b2Draw::e_aabbBit; //flags += b2Draw::e_pairBit; //flags += b2Draw::e_centerOfMassBit; debugDraw->SetFlags(flags);
m_world
->SetDebugDraw(debugDraw);

  PTM_RATIO是一个需要自定义的宏(#define PTM_RATIO 32),代表32像素/米,在BOX2D中使用的距离单位是米,因此需要进行一个像素到米的转换。flags是一个二进制的标识,代表了调试绘制的类型。

  3.重写场景类的draw函数,让“世界”绘制调试信息

void Test::draw()
{
    CCLayer::draw();

    ccGLEnableVertexAttribs(kCCVertexAttribFlag_Position);
    kmGLPushMatrix();

    m_world->DrawDebugData();

    kmGLPopMatrix();
}

  虽然对这段代码内容不很理解,但这段代码也无需修改,只要知道其功能就可以了。

  这里还要注意一个问题,在调试绘图的时候,最好不要加上背景图片,不然很容易干扰到绘制视觉。

开启BOX2D引擎的调试绘图功能

标签:

原文地址:http://www.cnblogs.com/demon90s/p/4429030.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!