cocos2dx之box2d画刚体外边框

来源:互联网 发布:海贼王好看的小说知乎 编辑:程序博客网 时间:2024/05/09 04:26

其实这些代码都可以在示例项目中找到,我以3.0引擎为例把代码贴出来:

首先到工程到引擎目录下tests/cpp-tests/Classes/Box2DTestBed中将GLES-Render.cpp和GLES-Render.h拷贝到工程中


其次在.h中添加#include "GLES-Render.h"并加入以下代码

<span style="font-family: Arial, Helvetica, sans-serif;">    virtual void draw(Renderer *renderer, const kmMat4 &transform, bool transformUpdated) override;</span>
  kmMat4 _modelViewMV;  void onDraw();  CustomCommand _customCommand;
<pre name="code" class="cpp">  GLESDebugDraw* m__debugDraw;
然后在.cpp中

void MyGameLayer::draw(Renderer *renderer, const kmMat4 &transform, bool transformUpdated){    Layer::draw(renderer, transform, transformUpdated);//我的<span style="font-family: Arial, Helvetica, sans-serif;">MyGameLayer类继承自Layer</span>        GL::enableVertexAttribs( cocos2d::GL::VERTEX_ATTRIB_FLAG_POSITION );        kmGLPushMatrix();    kmGLGetMatrix(KM_GL_MODELVIEW, &_modelViewMV);        _customCommand.init(_globalZOrder);    _customCommand.func = CC_CALLBACK_0(MyGameLayer::onDraw, this);    renderer->addCommand(&_customCommand);        kmGLPopMatrix();}void MyGameLayer::onDraw(){    kmMat4 oldMV;    kmGLGetMatrix(KM_GL_MODELVIEW, &oldMV);    kmGLLoadMatrix(&_modelViewMV);    m__world->DrawDebugData();//m__world是b2world对象    kmGLLoadMatrix(&oldMV);}

最后,在创建b2world对象的时候加入这段代码

    m__debugDraw = new GLESDebugDraw(32.0);    m__world->SetDebugDraw(m__debugDraw);    uint32 flags = 0;    flags += b2Draw::e_shapeBit;    //flags += b2Draw::e_jointBit;    //flags += b2Draw::e_aabbBit;    //flags += b2Draw::e_pairBit;    //flags += b2Draw::e_centerOfMassBit;    m__debugDraw->SetFlags(flags);

现在运行一下,就可以画出来了

不要忘了在onExit()中将这些new出来的对象删除

0 0
原创粉丝点击