0

我应该如何使用 Cocos2d-x 3.0 启用调试绘制?有一些代码可以用 cocos2d-x 2.0 做到这一点,但它们甚至不能在 Cocos2d-x 上编译。不幸的是,我对 cocos2d-x 和 Box2d 都是新手,我不知道如何移植它们。如果您能分享绘制形状的方法,那就太好了。

编辑:

我发现了这个:

http://blog.csdn.net/tian2kong/article/details/20386213

我已经覆盖了draw我的应用程序 main 的方法,Layer如下所示:

void HelloWorld::draw()
{
    GL::enableVertexAttribs(GL::VERTEX_ATTRIB_FLAG_POSITION);
    kmGLPushMatrix();
    m_world->drawDebugData();
    kmGLPopMatrix();
}

并且还这样做了:

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

它奏效了!但是当我添加孩子一个精灵时,形状仍然会吹我的精灵。如何把他们带到前面?

4

4 回答 4

2

打开 Spotlight 并搜索 GLES-Render.cpp。该文件将在 cocos2dx 文件夹中的路径中。打开封闭文件夹并将文件 GLES-Render.h 和 GLES-Render.cpp 拖到项目中。然后在init方法中添加如下代码

b2Draw *m_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;
m_debugDraw->SetFlags(flags);
H_world->SetDebugDraw(m_debugDraw); 

然后添加draw方法。

void HelloWorld::draw()
{
kmGLPushMatrix();
H_world->DrawDebugData();
kmGLPopMatrix();
}

不要忘记包含 GLES-Render.h

于 2014-09-01T17:53:16.030 回答
1

你不能把尸体带到前面。如果你想看到你的精灵背后的身体,你可以将它们的不透明度设置为 sprite->setOpacity(100)。

我使用以下代码绘制

void GameLayer:: setPhysics() {
b2Vec2 gravity = b2Vec2(0.0f,0.0f);// Initializing World
world = new b2World(gravity);

m_debugDraw = new GLESDebugDraw( PTM_RATIO );
world->SetDebugDraw(m_debugDraw);

world->SetAllowSleeping(false);

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);

contactListener = new MyContactListener(this);
world->SetContactListener(contactListener);
}

这和你的一样……你能再解释一下你的问题吗

于 2014-03-11T04:27:39.440 回答
1

对于调试绘图,您需要两个文件

文件下载链接

之后

包括该文件

并在 .h 文件中创建一个 Vaiable

GLESDebugDraw *debugDraw;

并在 .ccp 文件中

b2Vec2 gravity;
gravity.Set(0.0f, -9.8f);
this->world = new b2World(gravity);

this->debugDraw = new GLESDebugDraw(PTM_RATIO);
this->world->SetDebugDraw(debugDraw);


uint32  flags  =  0 ;
flags +=  b2Draw::e_shapeBit ;
flags += b2Draw::e_jointBit;
// flags + = b2Draw :: e_aabbBit;
// flags + = b2Draw :: e_pairBit;
flags += b2Draw::e_centerOfMassBit;
this->debugDraw->SetFlags (flags);

在 。h 文件

void draw(Renderer *renderer, const Mat4 &transform, uint32_t flags);

在.cpp

void HelloWorld::draw(Renderer *renderer, const Mat4 &transform, uint32_t flags)
{
    Layer::draw(renderer, transform, flags);
    Director* director = Director::getInstance();
    GL::enableVertexAttribs(GL::VERTEX_ATTRIB_FLAG_POSITION );
    director->pushMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_MODELVIEW);
    world->DrawDebugData();
    director->popMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_MODELVIEW);
}

现在享受调试抽奖

于 2014-09-30T06:17:52.653 回答
0

您可以简单地在当前图层上方添加另一个图层。

您可以在上层添加您在此处发布的代码,然后一切都应该正常工作。

于 2014-03-12T10:32:24.503 回答