1

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

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

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

帮助?

4

2 回答 2

4

我想通了,以防其他人偶然发现这一点。

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

b2Draw *debugDraw = new GLESDebugDraw(PTM_RATIO);

debugDraw->SetFlags(GLESDebugDraw::e_shapeBit);

_world->SetDebugDraw(debugDraw);

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

_world->DrawDebugData();

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

于 2012-10-20T18:53:57.143 回答
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);

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

无效 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

于 2013-10-31T08:18:00.503 回答