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

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

  在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();
}

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

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

时间: 2024-10-22 16:28:05

开启BOX2D引擎的调试绘图功能的相关文章

《割绳子》《蜡笔物理学》《Contre Jour》《顽皮鳄鱼爱洗澡》等游戏用Box2D引擎实现物理部分的方法(转)

从最热门游戏排行榜和flash游戏网站上,你能看到什么?许多2D游戏都有非常出色的物理学和美术设计.现在我们要学习那些游戏使用了什么物理学以及如何用Box2D制作它们. 除了知道是“什么”,更重要的是知道“如何做”,首先,我想问读者一个问题:如果你想复制物理游戏的机制或行为,你需要什么技术和方法? 一年以前,我问了自己同样的问题,<6 Dimensions>就是问题的答案.这款游戏是一个创意的盒子,每一面都包含一组使用Box2D物理学再加上视觉美学技术制作的不同的游戏机制.在此,我将与大家分享

开启树莓派的硬件看门狗功能

前段时间挖矿,将CGMiner设置为开机启动,由于各种问题系统不是很稳定,时不时的就停了L 网上查了一下,树莓派居然自带硬件的看门狗功能,立即尝试了一把,基本上能够解决我的问题 ? 原理很简单: 看门狗(Watchdog)需要不停的喂骨头(heartbeat) 如果在规定的时间内都没有喂(默认15秒),系统自动重启 ? 不过,一秒钟要吃一块骨头,还要不停的吃,还真是吃不饱的狗呀,呵呵~~~ ? 下面是开启该功能的脚本 // 开启模块 sudo modprobe bcm2708_wdog sudo

Matlab中利用mex编译Opencv实现画板绘图功能

图形绘制是标记和可视化数据的重要方法. 通过在Matlab中集成画板绘图功能, 可为科学计算提供便利. 1 设置Matlab支持Opencv编译 操作系统: 麒麟14.04(基于Ubuntu 14.04) 命令: mex -v -> mexopts.sh sourced from directory (DIR = $MATLAB/bin) FILE = /usr/local/MATLAB/R2013a/bin/mexopts.sh --------------------------------

【mysql】Mysql 5.1.46开启InnoDB引擎

众所周知Mysql5.1.46默认引擎为Myisam,那如何开启InnoDB引擎呢?本人在安装数据库并开启InnoDB引擎时出现不少错误,先一一列举仅供大家参考. 1. 系统环境 系统: CentOS release 5.4 (Final) 软件: MySQL-server-community-5.1.46-1.rhel5 MySQL-shared-compat-5.1.37-0.rhel5 MySQL-client-community-5.1.46-1.rhel5 2. 开启InnoDB报错

开启Nginx的目录文件列表功能

nginx默认是不允许列出整个目录的.如何开启Nginx的目录文件列表功能?打开nginx.conf文件,在location server 或 http段中加入 autoindex on;另外两个参数最好也加上去:autoindex_exact_size on;显示出文件的确切大小,单位是bytes.改为off后,显示出文件的大概大小,单位是kB或者MB或者GBautoindex_localtime on;默认为off,显示的文件时间为GMT时间.改为on后,显示的文件时间为文件的服务器时间 配

Delphi 的绘图功能[10] - TFONT 类

Delphi 的绘图功能[10] - TFONT 类 //TFont 类的常用属性: {Name: 字体名称} {Color: 颜色} {Size.Height: 字号与字体高度, 都可以设定字体大小} {Style: 字体样式; 是个集合值, 是下面可选值或它们的组合:}fsBoldfsItalicfsUnderlinefsStrikeOut {Pitch: 是字间距相关的, 有三个枚举值可选(不过我没测试出效果):}fpDefaultfpVariablefpFixed {Charset: 字

Unity 5引擎公布:提供完整功能且不收分成

[狗刨学习网专稿,转载请注明出处] 狗刨学习网报道/Unity今天推出了Unity 5引擎发布计划,同时宣布将会调整该引擎的业务模式.和此前的产品一样,Unity 5同样会推出个人免费版,以及一个月费75美元的专业版和1500美元的永久版授权. 最大的不同似乎是付费版本,在Unity 4引擎中,开发商们必须付费获得3D纹理支持或者优化的视觉效果,比如景深或者动态模糊.而在Unity 5引擎中,这些功能和编辑器都将向个人版和专业版用户推出.而且,专业版用户会获得更多的功能,比如来自Unity Cl

Matlab学习笔记——基本绘图功能

MATLAB两种基本绘图功能:二维平面图形和三维立体图形 一.二维平面图形 1.基本图形函数 plot是绘制二维图形的最基本函数,它是针对向量或矩阵的列来绘制曲线的.也就是说,使用plot函数之前,必须首先定义好曲线上每一点的x 及y 坐标,常用格式为: (1)plot(x) 当x 为一向量时,以x元素的值为纵坐标,x的序号为横坐标值绘制曲线.当x为一实矩阵时,则以其序号为横坐标,按列绘制每列元素值相对于其序号的曲线,当x 为m× n 矩阵时,就由n 条曲线. (2)plot(x,y) 以x 元

开启cocos2dx 3.0的Console功能

下面内容用于自己知识的备忘,想看具体内容,请參照例如以下地址. 原英文文地址: http://discuss.cocos2d-x.org/t/cocos3-0-tutorial-console-tutorial/14283?username_filters=Lef 注意点: 1.在windows平台下,连接本地时,IP应该为:127.0.0.11234,即 telnet 127.0.0.1 1234: 在Mac平台下,才是telnet  0.0.0.0 1234.这一点,原作者没有写清楚. 2.