如何使用Cocos2d-x 3.0启用调试绘图?有些代码使用cocos2d-x 2.0来执行此操作,但它们甚至不能在Cocos2d-x上编译。不幸的是我不熟悉cocos2d-x和Box2d,我不知道如何移植它们。如果您要分享绘制形状的方法,那将是很好的。
编辑:
我发现了这个:
http://blog.csdn.net/tian2kong/article/details/20386213
我已经覆盖了我的应用程序主draw
的{{1}}方法,如下所示:
Layer
也做到了这一点:
void HelloWorld::draw()
{
GL::enableVertexAttribs(GL::VERTEX_ATTRIB_FLAG_POSITION);
kmGLPushMatrix();
m_world->drawDebugData();
kmGLPopMatrix();
}
它有效!但是当我添加一个精灵时,这些形状会让我精神恍惚。如何把它们带到前面?
答案 0 :(得分:2)
打开聚光灯并搜索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
答案 1 :(得分:1)
你不能把身体带到前面。如果你想在你的精灵后面看到你的身体,你可以将它们的不透明度设置为精灵 - > 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);
}
和你的相同....你能不能再解释一下你的问题
答案 2 :(得分: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);
in。 h文件
void draw(Renderer * renderer,const Mat4& transform,uint32_t flags);
in .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);
}
现在享受调试绘制
答案 3 :(得分:0)
您可以在当前图层上方添加另一个图层。
您可以在上层添加您在此处发布的代码,然后一切都应该正常工作。