cocos2d-x 005 화면 띄우기 / 씬 전환
화면(씬) 전환을 해보겠습니다. 이걸 다 이해한다면, 조금 과장해서 표현하자면 다 배웠다고 말할 수 있습니다.
사실 2D 게임이라는게 그림을 띄우는 겁니다. 글자도 있겠지만요.
그림을 적절하게 띄워주는 것. 이게 다입니다.
어릴 때는 게임 만들기에 특별한 비법 같은게 있을거라고 생각했는데요.
있을지도 모르지만, 기본이 되는 기술은 그림 띄워주기입니다.
여튼 cocos2d-x는 화면(씬) 위에 레이어를 올리고, 레이어 위에 스프라이트(그림)을 올리는 식으로 되어 있습니다.
화면(씬), 레이어, 스프라이트(그림) 순으로 계층을 이루는 것입니다.
나름대로 화면(씬), 레이어, 스프라이트(그림) 구조를 최대한 심플하게 정리해보았습니다.
MainScene.h/cpp 파일의 내용을 아래와 같이 수정합니다.
MainScene.h
——————–
#include “cocos2d.h”
USING_NS_CC;
#pragma once
class MainScene {
public:
static cocos2d::Scene* createScene();
};
class MainLayer : public cocos2d::Layer {
public:
CREATE_FUNC(MainLayer);
virtual bool init();
};
MainScene.cpp
——————–
#include “MainScene.h”
Scene* MainScene::createScene() {
auto scene = Scene::create();
auto layer = MainLayer::create();
scene->addChild(layer);
return scene;
}
bool MainLayer::init() {
Size visibleSize = Director::getInstance()->getVisibleSize();
Vec2 origin = Director::getInstance()->getVisibleOrigin();
auto sprite = Sprite::create(“main.png”);
sprite->setPosition(Vec2(visibleSize.width / 2 + origin.x, visibleSize.height / 2 + origin.y));
this->addChild(sprite, 0);
return true;
}
알아보기 쉽도록 클래스를 2개로 만들었습니다. MainScene 이라는 클래스는 화면(씬)을 의미하고, MainLayer 라는 클래스는 레이어를 의미합니다.
이어서 HelloWorldScene.cpp 의 menuCloseCallback 함수를 수정합니다.
기존의 함수 내용은 프로그램을 종료하는 것인데, 전부 주석처리를 하고요. 아래와 같이 수정합니다.
void HelloWorld::menuCloseCallback(Ref* pSender) {
auto director = Director::getInstance();
auto Scene = MainScene::createScene();
Director::getInstance()->pushScene(Scene);
}
이렇게 하면, 메인화면에서 우측 하단의 버튼을 클릭했을 때 menuCloseCallback 함수가 실행되고, 화면(씬)을 생성하고 (auto Scene = MainScene::createScene();), 레이어를 생성하고 (auto layer = MainLayer::create();), 스프라이트(그림)를 생성하게 (auto sprite = Sprite::create(“main.png”);) 됩니다.