您的位置:首页 > 移动开发 > Cocos引擎

cocos2dx之box2d画刚体外边框

2016-04-01 16:08 357 查看
其实这些代码都可以在示例项目中找到,我以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出来的对象删除
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: