cocos2d-x 005 화면 띄우기 / 씬 전환

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”);) 됩니다.