cocos2dx之box2d画刚体外边框

其实这些代码都可以在示例项目中找到,我以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出来的对象删除

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值