cocos2d-x 에서 레이어를 통해 게임 화면을 구성합니다.
이미지 출처 : http://www.learn-cocos2d.com
이런식으로 말이죠. 레이어를 풀스크린으로 쓰면 상관이 없지만 간혹 특정 크기에 맞춰야 할때가 있습니다. 화면을 분할하여 좌측, 우측 레이어를 구분해서 사용한다던가 할때 말이죠. cocos2d-x의 Layer 클래스는 상위 Node 클래스를 상속 받기 때문에 setContentSize 인터페이스를 사용할 수 있습니다.
하지만 이 인터페이스를 통해 크기를 조절한다 해도 실제 화면에서 보면 아무런 변화가 없습니다.
아래의 그림은 960 x 640 해상도에서 집과 캐릭터를 메인 레이어에 출력한 화면입니다. 이 메인 레이어 사이즈는 가로 해상도의 반인 480 x 640으로 설정해준 상태입니다(하늘 배경은 백그라운드 레이어 ).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | bool CGameScene::InitLayer( void ) { bool bRet = false ; do { // super init first CC_BREAK_IF( !CCScene::init() ); // 배경 레이어 CGameSceneBGLayer* pBGLayer = CGameSceneBGLayer::create(); CC_BREAK_IF( !pBGLayer ); this ->addChild( pBGLayer, 0, CHILD_LAYER_BACKGROUND ); // 메인 레이어 CGameSceneMainayer* pMainLayer = CGameSceneMainLayer::create(); CC_BREAK_IF( !pMainLayer ); pMainLayer->setContentSize( CCSizeMake( 480, 640 ) ); this ->addChild( pMainLayer, 0.5, CHILD_LAYER_MAIN ); bRet = true ; } while (0); return bRet; } |
하지만 실제 화면은 960 x 640 풀 사이즈로 나오고 있습니다. 가로 사이즈 480으로 설정한대로라면 오른쪽에 있는 집, 대머리 캐릭터는 짤려야 정상인데 말이죠. 레이어가 설정해준 480 x 640의 크기로 출력되게 하려면 Layer 클래스를 상속 받아 visit 함수를 아래와 같이 재정의 해주어야합니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | void CClippingLayer::visit() { glPushMatrix(); glEnable( GL_SCISSOR_TEST ); CCSize contentSize = getContentSize(); CCEGLView::sharedOpenGLView()->setScissorInPoints( getPosition().x, getPosition().y, contentSize.width, contentSize.height ); CCNode::visit(); glDisable( GL_SCISSOR_TEST ); glPopMatrix(); } |
이 후 메인레이어를 새로 정의한 CClippingLayer를 상속 받아 사용하면...
이제 원했던대로 메인 레이어가 반만 출력됩니다.
출처 : http://kindtis.tistory.com/489
'공부 > Cocos2d-x' 카테고리의 다른 글
CCSprite Copy(복사)하기 (0) | 2014.02.25 |
---|---|
Cocos2dxActivity cannot be resolved to a type (이클립스) (0) | 2013.12.29 |
[cocos2d-x] 안드로이드, iOS 개발환경 세팅 1 (0) | 2013.09.19 |
[cocos2d-x] 안드로이드, iOS 개발환경 세팅 2 (0) | 2013.09.19 |
[Cocos2d-x] Fade- 효과 (0) | 2013.08.15 |