BOX2D 엔진의 드로잉 디버깅 기능 켜기

2567 단어 box2D
최신X버전에서 엔진은 물리 엔진을 통합시켜 더욱 편리한 인터페이스를 제공했다. 디버깅 그림을 포함한다. 이것은 세계 대상의 인터페이스인 setDebugDrawMask(int mask)이다. 파라미터는 보통DEBUGDRAWAll이면 돼.그럼 어떻게 세계적인 상대를 얻게 될까요?보통 scene의 getPhysicsWorld 인터페이스를 사용하면 됩니다.
다음은 이전에 쓴 것이다.x버전에서의 오픈 방법은 분명히 번거로워서 버려도 될 것 같습니다.
물리 게임을 할 때는 그림을 디버깅하는 기능을 사용해야 한다.그러나 나는 실제 조작 중에 약간의 번거로움을 만났으니, 여기서 총괄하여 나중에 쓸 수 있도록 하자.
BOX2D에서 b2Draw 클래스를 제공했는데 그 안에 많은 그리기 방법이 포함되어 있습니다. (허함수 인터페이스가 많은 것 같아서 실현해야 할 것 같습니다.)우선 이 클래스와 하위 클래스의 대상을 하나의 그리기 모듈로 보고'세계'를 불러오고 이 모듈을 호출함으로써 디버깅 그리기 기능을 실현한다.
자세한 단계는 다음과 같습니다.
  1.GLES-Render를 복제합니다.h와 GLES-Render.cpp 두 파일을 Classes 디렉토리로 이동
GLESDebugDraw는 b2Draw 클래스를 계승하여 일부 그리기 인터페이스를 실현했다.GLESDebugDraw 클래스는 이 두 파일에 정의되어 있습니다.그러나cocos2d-x 엔진은 이 헤더 파일을 제공하지 않기 때문에 수동으로 복사하고 도입해야 합니다.코코스2d-x의 Box2DTEstBed 예시 항목에서 이 두 파일을 찾을 수 있습니다.
  2.GLESDebugDraw 클래스 대상 (그리기 모듈) 을 만들고, 그리기 표식 (flag) 을 설정한 다음, 그리기 모듈을 '세계' 에 불러옵니다.
    GLESDebugDraw *debugDraw = new GLESDebugDraw(PTM_RATIO);
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);
m_world
->SetDebugDraw(debugDraw);

  PTM_RATIO는 32픽셀/미터를 나타내는 사용자 정의 매크로(#define PTM RATIO 32)로, BOX2D에서 사용되는 거리 단위는 미터이므로 픽셀에서 미터로 변환해야 합니다.flags는 디버깅을 위한 그림 형식을 나타내는 이진 표식입니다.
  3.장면 클래스의draw 함수를 다시 써서 '세계' 에서 디버깅 정보를 그립니다
void Test::draw()
{
    CCLayer::draw();

    ccGLEnableVertexAttribs(kCCVertexAttribFlag_Position);
    kmGLPushMatrix();

    m_world->DrawDebugData();

    kmGLPopMatrix();
}

이 코드의 내용에 대해 잘 이해하지 못하지만 이 코드도 수정할 필요가 없고 그 기능만 알면 된다.
여기서 또 하나의 문제를 주의해야 한다. 그림을 디버깅할 때 배경 그림을 추가하지 않는 것이 가장 좋다. 그렇지 않으면 그림 그리는 시각을 방해하기 쉽다.

좋은 웹페이지 즐겨찾기