2014년 7월 31일 목요일

ios에서 cocos2d-x(3.x)의 game view를 특정 뷰의 child view에 붙이기

cocos2d-x의 게임뷰를 특정 뷰의 child뷰로 가져오기 위한 방법입니다.
(cocos2d-x 3.2 버전 기준)


1. cocos2d-x기반의 빈 프로젝트(hello world)를 만듭니다.

2. AppController.mm의 didFinishLaunchingWithOptions 함수 안에
GLView를 생성하고 싱글톤 객체인 cocos2d::Director를 구동하는 코드가 있는데
여기서 이것들을 하면 안되니 모두 지워버립니다. ㅎㅎ

나머지 applicationDidEnterBackground, applicationWillEnterForeground 등의 함수안의 코드는 그냥 그대로 둡니다.


3. 새로운 컨트롤러(이하 CustomViewController)를 만들고 게임뷰를 담을 UIVIew(이하 viewGLViewContainter)객체를 하나 만들어 놓습니다.


4. CustomViewController 소스에서 아래 두 함수를 통해 게임뷰를 생성하여 viewGLViewContainter붙이고 정리하는 코드를 추가합니다.
- (void)viewWillAppear:(BOOL)animated
- (void)viewWillDisappear:(BOOL)animated

소스파일(CustomViewController.mm 소스 파일)에 아래 2개의 헤더를 import합니다.
- cocos2dx의 cpp코드를 사용해야 하니 mm 파일로 만들어야 합니다.

#import "cocos2d.h"
#import "CCEAGLView.h"


viewWillAppear함수에 아래 코드를 추가합니다.
- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
    
    // Init the CCEAGLView
    CCEAGLView *eaglView = [CCEAGLView viewWithFrame: self.viewGLViewContainter.bounds
                             pixelFormat: kEAGLColorFormatRGBA8
                             depthFormat: GL_DEPTH24_STENCIL8_OES
                      preserveBackbuffer: NO
                              sharegroup: nil
                           multiSampling: NO
                         numberOfSamples: 0];
    
   
    [self.viewGLViewContainter addSubview:eaglView];

    cocos2d::GLView *glview = cocos2d::GLView::createWithEAGLView(eaglView);
    cocos2d::Director::getInstance()->setOpenGLView(glview);
    
    cocos2d::Application::getInstance()->run();
}

viewWillDisappear함수에 아래 코드를 추가합니다.
- (void)viewWillDisappear:(BOOL)animated
{
    cocos2d::Director::getInstance()->end();

    cocos2d::Director::getInstance()->mainLoop();

    [super viewWillDisappear:animated];
}


정상적이라면 아래와 유사한 화면을 볼 수 있겠습니다.


댓글 없음:

댓글 쓰기