DebugDraw

ÇϺ¹ÀÇ ºñÁê¾ó µð¹ö°Åó·³ Box2D¿¡¼­ RigidBodyÀÇ Shape¸¦ ±×·¡ÇÈÀ¸·Î º¼¼ö ÀÖ´Â ¹æ¹ýÀÌ ÀÖ´Ù.

GLESDebugDraw¸¦ »ç¿ëÇÏ¸é µÈ´Ù.
¿îµ¿ÇÏ°í ÀÖ´Â °´Ã¼´Â Àû»öÀ¸·Î ¿îµ¿ÇÏ°í ÀÖÁö ¾Ê´Â °´Ã¼´Â ȸ»öÀ¸·Î Ç¥½ÃµÈ´Ù.

1. GLES-Render.h, GLES-Render.cpp º¹»ç

GLESDebugDraw¸¦ »ç¿ëÇϱâ À§Çؼ­´Â cocos2d-2.0-x-2.0.4/samples/TestCpp/Classes/Box2DTestBed¿¡¼­ GLES-Render.h, GLES-Render.cpp ÆÄÀÏÀ» º¹»çÇؼ­ ÀÚ½ÅÀÇ ÇÁ·ÎÁ§Æ®¿¡ Æ÷ÇÔ½ÃŲ´Ù.

2. Çì´õ¿¡ GLESDebugDraw °´Ã¼ ¼±¾ð

GLES-Render.h ÆÄÀÏÀ» Æ÷ÇÔ ½ÃÅ°°í GLESDebugDraw (mDebugDraw)°´Ã¼ ¼±¾ðÀ» ÇÑ´Ù.
µð¹ö±ë Á¤º¸¸¦ ±×¸®±â À§ÇØ CCLayerColor::draw ¸â¹öÇÔ¼ö¸¦ ¼±¾ðÇÑ´Ù.

HelloWorldScene.h
#include "GLES-Render.h"

class HelloWorld : public cocos2d::CCLayerColor
{
public:
    //ÄÚµå »ý·«
    virtual void draw();
private:
    GLESDebugDraw *mDebugDraw;
};

3. ÅؽºÃÄ ÁÖ¼®Ã³¸®

box2DÀÇ debugDraw¸¦ »ç¿ëÇÒ °ÍÀ̱⠶§¹®¿¡ ±âÁ¸¿¡ ±×¸®°í ÀÖ´ø ÅؽºÃÄ´Â ÁÖ¼®Ã³¸®ÇÑ´Ù.

Çì´õ¿¡ ¼±¾ð µÇ¾ú´ø mDebugDraw¸¦ NULL·Î ÃʱâÈ­ ÇÑ´Ù.

ÅؽºÃÄ ÁÖ¼®Ã³¸®
bool HelloWorld::init()
{
    mDebugDraw = NULL;

    //ÄÚµå »ý·«

    //box2d ¸®Áöµå¹Ùµð¿ë ÅؽºÃÄ
    //mTexture = CCTextureCache::sharedTextureCache()->addImage( "CloseNormal.png");

    createPhysicsWorld();
}

4. GLESDebugDraw »ý¼º ¹× ÃʱâÈ­

GLESDebugDraw¸¦ »ý¼ºÇÏ°í ÃʱâÈ­ ÇÑ´Ù.

GLESDebugDraw »ý¼º ¹× ÃʱâÈ­

void HelloWorld::createPhysicsWorld()
{
    //ÄÚµå »ý·«

    mDebugDraw = new GLESDebugDraw( PTM_RATIO);
    if(mDebugDraw)
    {
        mPhysicsWorld->SetDebugDraw( mDebugDraw);

        uint32 flags = 0;
        flags |= b2Draw::e_shapeBit;               
        //        flags |= b2Draw::e_jointBit;
        //        flags |= b2Draw::e_aabbBit;
        //        flags |= b2Draw::e_pairBit;
        //        flags |= b2Draw::e_centerOfMassBit;
        mDebugDraw->SetFlags(flags);
    }
}

 

Âü°í ) ¸ðµç RigidBody »èÁ¦

Çì´õ ÆÄÀÏ¿¡ onExit ¸â¹öÇÔ¼ö¸¦ ¼±¾ðÇÑ´Ù.

virtual void onExit();

DestroyBody¸¦ ÀÌ¿ëÇØ RigidBody¸¦ »èÁ¦ÇÑ´Ù.

¸ðµç RigidBody »èÁ¦
void HelloWorld::onExit()
{
    __super::onExit();

    for(b2Body *body = mPhysicsWorld->GetBodyList(); body; )
    {
        if( body->GetUserData() != NULL)
        {
            CCSprite *spriteData = (CCSprite*)body->GetUserData();
            this->removeChild(spriteData, true);
        }
        
        b2Body* tempBody = body;
        body = body->GetNext();
        mPhysicsWorld->DestroyBody( tempBody);
    }
}

´Ù¿î·Îµå : HelloWorldScene.h    HelloWorldScene.cpp