Document Version : V1.3 - 2017.07.11 with cocos2d-x 3.15.1

Document Version : V1.2 - 2015.06.08 with cocos2d-x 3.6

Document Version : V1.1 - 2014.03.14 with cocos2d-x 3.0beta2

Document Version : V1.0 - 2013.07.10 with cocos2d-x 2.1.4


제 책인 "시작하세요! Cocos2d-x 3.0 프로그래밍" 내용을  3.15.1 버전에 맞게 수정하여 올리고 있습니다.

이 글은 네이버카페 "Cocos2d-x 사용자 모임"에 동시에 게재되고 있습니다.


개발환경 : 

  • Windows7
  • Visual Studio Community 2017
  • Cocos2d-x 3.15.1
  • 사용 프로젝트 : proj.win32


풀리 조인트

커맨드창을 열어 원하는 디렉터리로 이동한 후에, 다음과 같이 cocos 명령어를 이용하여 새로운 프로젝트를 생성합니다.


c:> cocos new Box2dEx11 -p com.study.box11 -l cpp  ↵


Box2dEx04의 모든 코드를 방금 만든 Box2dEx11에 적용시킵니다.

Box2dEx04의 Classes 폴더의 다음 파일들을 Box2dEx11의 Classes 폴더에 덮어 쓰면 됩니다.


■ HelloWorldScene.h

■ HelloWorldScene.cpp

■ GLES-Render.h

■ GLES-Render.cpp



그러고 나서 다음의 디렉터리에서 

{Cocos2d-x가 설치된 디렉터리} / tests / cpp-tests / Resources / Images

아래의 파일을 찾아 리소스 폴더에 추가합니다.


■  blocks.png


Box2dEx11은 Box2dEx04 - 마우스 조인트까지 적용된 상태에서 시작합니다.



헤더 부분은 변경된 점이 없습니다.

[ HelloWorldScene.h  박스2D 풀리 조인트 ]

     생략 : Box2dEx04의 코드와 같음 




다음은 풀리 조인트 프로젝트에서 Box2dEx04와 달라진 코드 부분입니다.
setBox2dWorld 메서드에서 풀리 조인트를 생성하는 부분만이 추가되고 다른 것은 변한 것이 없습니다.

[ HelloWorldScene.cpp – 박스2D 풀리 조인트 ]

     생략 : Box2dEx04의 코드와 같음 


void HelloWorld::setBox2dWorld()

{

    // 마우스 조인트 바디를 생성해서 월드에 추가한다.

    bDrag = false;

    gbody = this->addNewSprite(Vec2(00), Size(00), b2_staticBodynullptr0);


    // *****************************************************************************


    b2PulleyJointDef pulleyJointDef;


    b2Body* body1 = this->addNewSprite(Vec2(200150), Size(4040),

                                                                 b2_dynamicBody"test"0);

    b2Body* body2 = this->addNewSprite(Vec2(300150), Size(4040),

                                                                 b2_dynamicBody"test"0);


    //b2Body* bodyA = this->addNewSprite(Vec2(200,300), Size(40, 40),

    //                                                              b2_staticBody, nullptr, 0);

    //b2Body* bodyB = this->addNewSprite(Vec2(300,300), Size(40, 40),

    //                                                              b2_staticBody, nullptr, 0);


    pulleyJointDef.Initialize(body1,

        body2,

        b2Vec2(200 / PTM_RATIO300 / PTM_RATIO),

        b2Vec2(300 / PTM_RATIO300 / PTM_RATIO),

        body1->GetPosition(),

        body2->GetPosition(),

        1);

    // 약 160 .. 200이라 중력의 영향으로 아래로 떨어졌다.

    pulleyJointDef.lengthA = 160 / PTM_RATIO;

    pulleyJointDef.lengthB = 160 / PTM_RATIO;

    pulleyJointDef.collideConnected = true;


    _world->CreateJoint(&pulleyJointDef);

}


     생략 : Box2dEx04의 코드와 같음 




풀리 조인트는 도르레 조인트로 두 바디 사이의 힘의 균형에 따라 움직입니다.