카테고리 없음

2017_7_8 ) 프로젝트 만들자마자 실행하면 어떻게 흘러갈까?

Beabletoet 2017. 7. 8. 22:36

main.cpp 에서 


AppDelegate app; 을 만들면 생성자 호출. 허나 내용은 없음.

다만, AppDelegate.h에서 AppDelegate 클래스를 살펴보면 cocos2d::Application 클래스를 상속받음을 알 수 있다.

그래서 CCApplication-win32.cpp에서 Application() 생성자 실행.

근데 사실 이 부분은 잘 모르겠다. xutility랑 xstring 파일의 내용도 왔다갔다 실행됨.

확실한건 sm_pSharedApplication 라는 application 포인터에 현재 내용을 넣어서 뭘 한다는거 정도..?


그리고 다시 main.cpp로 돌아와서 

return Application::getInstance()->run(); 실행


CCApplication-win32.cpp의 getInstance()

cc_assert 함수로 sm_pSharedApplication를 진단한 후

sm_pSharedApplication를 그대로 리턴해줌.


그리고는 run()을 실행. 역시 CCApplication-win32.cpp.

솔직히 내용은 잘 모르겠음.


단 AppDelegate.cpp의 applicationDidFinishLaunching()가 호출되고 거기서 창이 뜸(내용은 X)

그리고 그 안에서

auto scene = HelloWorld::createScene();




HelloWorld.Scene.cpp로 옴.

Scene* HelloWorld::createScene() 함수에서

return HelloWorld::create(); 을 실행.


HelloWorldScene.h 에서

CREATE_FUNC(HelloWorld);

HelloWorld를 create해주는 거라는데 잘 모르겠고 다시 HelloWorld.Scene.cpp의 HelloWorld::init() 실행.


if ( !Scene::init() )으로 이미 이니셜라이징 되어있는건 아닌지 확인.


auto visibleSize = Director::getInstance()->getVisibleSize(); // getVisibleSize()는 openGL view 상에서의 visible size를 리턴.


Vec2 origin = Director::getInstance()->getVisibleOrigin(); // getVisibleOrigin()은 openGL 상의 visible origin coordinate를 리턴. Vec2로 리턴해준다는 모양.


auto closeItem = MenuItemImage::create("CloseNormal.png", "CloseSelected.png", CC_CALLBACK_1(HelloWorld::menuCloseCallback, this));

//MenuItemImage의 create() 함수에서 첫번째 인수는 메뉴에서 사용하려는 이미지, 두번쨰 인수를 버튼이 눌려졌을 때 사용될 이미지, 3번째는 콜백 함수의 첫 번째 인자 (메뉴가 탭됐을 때 호출되어야 할 함수), 4번째는 콜백 함수의 두 번째 인자 (메뉴가 눌렸을 때 반응해야 하는 객체. 위의 this는 메뉴가 생성된 장면을 참조.


여기서 클릭 시 menuCloseCallback 함수가 호출되어 

Director::getInstance()->end();

해서 종료되는 모양.


closeItem->setPosition(Vec2(origin.x + visibleSize.width - closeItem->getContentSize().width/2 ,

                                origin.y + closeItem->getContentSize().height/2));

//closeItem의 위치를 잡아줌


auto menu = Menu::create(closeItem, NULL);

menu->setPosition(Vec2::ZERO);

this->addChild(menu, 1);

//메뉴 생성!


auto label = Label::createWithTTF("Hello World ㅎㅇㅎㅇ", "fonts/08SeoulNamsanM_0.ttf", 24);

//레이블 추가. 할 말, 폰트 경로, 사이즈 순으로 인수를 넣었다.


label->setPosition(Vec2(origin.x + visibleSize.width/2,

origin.y + visibleSize.height - label->getContentSize().height));

//레이블 위치 설정.


this->addChild(label, 1);

//레이블을 자식으로 넣는다는듯


auto sprite = Sprite::create("HelloWorld.png");

sprite->setPosition(Vec2(visibleSize.width/2 + origin.x, visibleSize.height/2 + origin.y));

//화면 가운데 그림을 넣어줌


this->addChild(sprite, 0);

//얘도 자식으로 넣음. 왜 얘는 0이고 위에는 1인지는 알아봐야 할 것 같음. Z order drawing priority 문제라는데 아마 레이어가 여러개일 떄 어느게 위고 어느게 아래냐 같은 문제가 아닌가 추측됨.




다시 한참 전의 AppDelegate.cpp로 돌아가서


director->runWithScene(scene); // 실행



그리고 CCApplication-win32.cpp 로 돌아와서 

 while(!glview->windowShouldClose()) 루프 안에서 화면이 뜨기 시작.