【问题标题】:Cocos2d + Box2d - how to debug/show bodies?Cocos2d + Box2d - 如何调试/显示身体?
【发布时间】:2012-10-20 16:34:08
【问题描述】:

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

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

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

帮助?

【问题讨论】:

  • 默认的 cocos2d + Box2D 项目不包括 GLES-Render 和一个示例调试绘制层吗?如果没有,请查看kobold2d.com 的 Kobold2D 并开始一个 cocos2d+Box2D 项目。包括调试绘制层。

标签: ios cocos2d-iphone box2d box2d-iphone


【解决方案1】:

我想出来以防其他人偶然发现。

  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()),但这没有用。

【讨论】:

  • GLESDebugDraw 自带 cocos2d 2.0?不,我找不到它
  • @bagusflyer 自带Cocos2d的Box2d模板
【解决方案2】:

在 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多