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

时间:2012-10-20 16:34:09

标签: ios cocos2d-iphone box2d box2d-iphone

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

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

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

帮助?

2 个答案:

答案 0 :(得分:4)

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

  1. 在初始化中,您需要创建调试绘图对象 (GLESDebugDraw附带Cocos2d + Box2d)。
  2. 设置标志以指定要绘制的内容(形状,重心,关节等)。
  3. 将其指定给您的世界对象。
  4. b2Draw *debugDraw = new GLESDebugDraw(PTM_RATIO);

    debugDraw->SetFlags(GLESDebugDraw::e_shapeBit);

    _world->SetDebugDraw(debugDraw);

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

    _world->DrawDebugData();

    必须使用draw方法,否则无法使用。我最初尝试将它放在我自己的预定方法中(我称之为_world-> step()),但这不起作用。

答案 1 :(得分:0)

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

ENDIF

}

检查Application.mk文件是否有

APP_CPPFLAGS:= -frtti -DCC_ENABLE_CHIPMUNK_INTEGRATION = 1 -DCOCOS2D_DEBUG = 1

然后用

替换它

APP_CPPFLAGS:= -frtti -DCC_ENABLE_BOX2D_INTEGRATION = 1 -DCOCOS2D_DEBUG = 1