Cocos2d + Box2d – 如何调试/显示机构?
我使用随附的Cocos2d(2.0)和Box2d创建了一个非常简单的设置。 我的世界里有一些尸体,但是还没有与它们联系起来的精灵,我想调试它们的方向,位置等。
这似乎是一个非常标准的任务,但我无法轻易找到如何做到这一点。 根据我的研究,它似乎与这些方法有关:
_world->SetDebugDraw(...); _world->DrawDebugData(...); // and the GLES-Render class
帮帮我?
我想出来以防万一其他人偶然发现了这一点。
- 在初始化中,您想要创建一个调试绘图对象(GLESDebugDraw附带Cocos2d + Box2d)。
- 设置标志以指定要绘制的内容(形状,重心,关节等)。
- 将其分配给您的世界对象。
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