인디 게임 강좌

전체보기

모바일 상단 메뉴

본문 페이지

[코코스2D] [Box2D] #10 - 로프 조인트

아이콘 내폰젤무거워
조회: 2644
2017-07-09 10:10:08

Document Version : V1.3 - 2017.07.09 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 Box2dEx09 -p com.study.box09 -l cpp  ↵


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

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


■ HelloWorldScene.h

■ HelloWorldScene.cpp

■ GLES-Render.h

■ GLES-Render.cpp



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

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

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


■  blocks.png


Box2dEx09는 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);


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


    b2RopeJointDef ropeJointDef;


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

                                                                 b2_dynamicBody"test"0);


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

                                                                 b2_dynamicBody"test"0);


    ropeJointDef.bodyA = body1;

    ropeJointDef.bodyB = body2;

    ropeJointDef.localAnchorA = b2Vec2(1.0f0.0f);

    ropeJointDef.localAnchorB = b2Vec2(-1.0f0.0f);    // -1 ~ 1

    ropeJointDef.maxLength = 1.5;    // 0.5  2.5  5.5

    ropeJointDef.collideConnected = true;

    _world->CreateJoint(&ropeJointDef);

}


     생략 : Box2dEx04의 코드와 같음 




로프 조인트는 디스턴스 조인트와 유사하게 서로 거리를 유지하는 용도이지만 두 바디 사이의 연결에 고무줄을 사용한 것이라고 설명한 바 있습니다. 아래의 두 그림을 보면 꺾이는 부분이 보이고 그 사이가 줄어들고 있음을 확인할 수 있습니다. 늘어나는 게 아니고 꺾이거나 줄어드는 것입니다.

 


정확한 효과를 보려면 바닥에 붙인 채로 밀고 당기고 하면 두 바디가 늘어난 고무줄이 줄어들 듯 자연스럽게 서로 붙는 모습을 볼 수 있습니다.













Lv28 내폰젤무거워

모바일 게시판 하단버튼

댓글

새로고침
새로고침

모바일 게시판 하단버튼

지금 뜨는 인벤

더보기+

모바일 게시판 리스트

모바일 게시판 하단버튼

글쓰기

모바일 게시판 페이징