我使用 Cocos2d (2.0) 和随附的 Box2d 创建了一个非常简单的设置。我的世界中有一些实体,但还没有与它们关联的精灵,我想调试它们的方向、位置等。
这似乎是一项非常标准的任务,但我无法轻松找到如何做到这一点。根据我的研究,它似乎与这些方法有关:
_world->SetDebugDraw(...);
_world->DrawDebugData(...);
// and the GLES-Render class
帮助?
我使用 Cocos2d (2.0) 和随附的 Box2d 创建了一个非常简单的设置。我的世界中有一些实体,但还没有与它们关联的精灵,我想调试它们的方向、位置等。
这似乎是一项非常标准的任务,但我无法轻松找到如何做到这一点。根据我的研究,它似乎与这些方法有关:
_world->SetDebugDraw(...);
_world->DrawDebugData(...);
// and the GLES-Render class
帮助?
我想通了,以防其他人偶然发现这一点。
b2Draw *debugDraw = new GLESDebugDraw(PTM_RATIO);
debugDraw->SetFlags(GLESDebugDraw::e_shapeBit);
_world->SetDebugDraw(debugDraw);
然后,诀窍是您需要覆盖ccLayer 的 draw 方法并调用:
_world->DrawDebugData();
它必须在 draw 方法中,否则这将不起作用。我最初试图把它放在我自己的预定方法中(我称之为 _world->step()),但这没有用。
在 coco2dx v2.2 中,这样做是
//在init()中写入
_debugDraw = new GLESDebugDraw(PTM_RATIO);
_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;
_debugDraw->SetFlags(flags);
/////////////////////////////////////////
无效 HelloWorld::draw() {
CCLayer::draw();
ccGLEnableVertexAttribs( kCCVertexAttribFlag_Position );
kmGLPushMatrix();
_world->DrawDebugData();
kmGLPopMatrix();
}
如果有,请检查 Application.mk 文件
APP_CPPFLAGS := -frtti -DCC_ENABLE_CHIPMUNK_INTEGRATION=1 -DCOCOS2D_DEBUG=1
然后将其替换为
APP_CPPFLAGS := -frtti -DCC_ENABLE_BOX2D_INTEGRATION=1 -DCOCOS2D_DEBUG=1