<COCOS2D-X>

2. 새 장면(Scene) 만들기

CodeGrimie 2021. 2. 1. 09:04

Cocos2D-X는 C++기반이기 때문에 장면(Scene) 역시 클래스를 상속받아서 만든다.

새 클래스를 만들 때 유의해야 할 점은 반드시 경로를 proj.win32 Classes 안에 생성해야 한다는 것이다.

 

Cocos2D-X는 크로스플랫폼 빌드를 할 수 있기 때문에 게임에 필요한 코드는 따로 관리하고 있다.

윈도우 외의 환경에서 빌드하기 위해서는 CMake 역시 관리해줘야 한다.

장면 코드의 기본 구조

▼ GameScene.h

#ifndef __GAME_SCENE_H__
#define __GAME_SCENE_H__

#include "cocos2d.h"

class GameScene : public cocos2d::Scene
{
public:
    GameScene();
    virtual ~GameScene();

    static GameScene* createScene();

    //CREATE_FUNC(GameScene);
    static GameScene* create();
    virtual bool init();
};

#endif // __GAME_SCENE_H__

▼ GameScene.cpp

#include "GameScene.h"
#include "CharacterLayer.h"

USING_NS_CC;

GameScene::GameScene()
{
    CCLOG("GameScene Constructor Call\n");
}
GameScene::~GameScene()
{
    CCLOG("GameScene Destructor  Call\n");
}

GameScene* GameScene::createScene()
{
    return (create());
}

GameScene* GameScene::create()
{
    GameScene* gameScene = new GameScene;

    if (gameScene != nullptr && gameScene->init())
    {
        gameScene->autorelease();
    }
    else
    {
        //CC_SAFE_DELETE(gameScene);
        if (gameScene != nullptr)
        {
            delete gameScene;
            gameScene = nullptr;
        }
    }

    return (gameScene);
}

bool GameScene::init()
{
    if (!Scene::init())
    {
        return (false);
    }

    CharacterLayer* characterLayer = CharacterLayer::create();
    this->addChild(characterLayer);

    return (true);
}

Cocos2D-X는 잘 짜여진 게임 엔진이라서 참고할 만한 코드 스타일들이 많다.

비록 초창기 모던 CPP의 코드에서 멈춰있지만 매크로의 사용법이나 변수형을 정하는 방법에서는 큰 공부가 된다.

 

기본적으로 Cocos2D-X에서는 create() 명령어로 객체를 생성하는데 내부에서 유효여부를 반환한다.

안드로이드 CMake 설정

새로 생성한 장면 코드 파일과 레이어 코드 파일을 CMakeList.txt에 추가해줘야 한다.

CMake의 편리함이 바로 이것인데 이 파일만 있다면 맥에서도 빌드를 할 수 있다. (해보진 않음)

# add cross-platforms source files and header files 
list(APPEND GAME_SOURCE
     Classes/AppDelegate.cpp
     Classes/GameScene.cpp
     Classes/CharacterLayer.cpp
     )
list(APPEND GAME_HEADER
     Classes/AppDelegate.h
     Classes/GameScene.h
     Classes/CharacterLayer.h
     )