Cocos2d + Box2d – 如何调试/显示机构?

我使用随附的Cocos2d(2.0)和Box2d创建了一个非常简单的设置。 我的世界里有一些尸体,但是还没有与它们联系起来的精灵,我想调试它们的方向,位置等。

这似乎是一个非常标准的任务,但我无法轻易找到如何做到这一点。 根据我的研究,它似乎与这些方法有关:

_world->SetDebugDraw(...); _world->DrawDebugData(...); // and the GLES-Render class 

帮帮我?

我想出来以防万一其他人偶然发现了这一点。

  1. 在初始化中,您想要创建一个调试绘图对象(GLESDebugDraw附带Cocos2d + Box2d)。
  2. 设置标志以指定要绘制的内容(形状,重心,关节等)。
  3. 将其分配给您的世界对象。

b2Draw *debugDraw = new GLESDebugDraw(PTM_RATIO);

debugDraw->SetFlags(GLESDebugDraw::e_shapeBit);

_world->SetDebugDraw(debugDraw);

然后,诀窍是你需要覆盖ccLayer的draw方法并调用:

_world->DrawDebugData();

它必须在绘制方法中,否则这将不起作用。 我最初尝试将它放在我自己的预定方法中(我称之为_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); 

//////////////////////////////////////////////////

void HelloWorld :: draw(){

 CCLayer::draw(); 

如果是CC_ENABLE_BOX2D_INTEGRATION

 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