<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
)