다양한 글들/PushPush 게임
2. Highlevel_Interface
smile blog
2022. 9. 23. 19:09
게임이 돌아가는데 필요한 기초 코드
Application.cpp (소스파일)
#include "Application.h"
#include "TitleScene.h"
#include "PlayScene.h"
Application* Application::mInstance = nullptr; // 클래스 바깥에서 초기화를 해줘야함 (전역변수처럼 사용하기 위해서)
Application::Application() // Applicaiton.h 에서 빠른 작업 및 리팩터링하면
: mbRunning(true)// Applicaiton.cpp에서 자동으로 이렇게 생성
, mPlaySceneNumber((int)SCENETYPE::TITLE) // int형 형변환
{
clear();
}
Application::~Application() // ::을 치면 namespace를 사용하는 것처럼 쓸수 있다 ex) namespace std
{
}
void Application::clear() // clear는 공백으로 만들어주는 함수인듯하다
{
for (int i = 0; i < SCENETYPE::END; i++)
{
mScenes[i] = nullptr;
}
}
bool Application::Initiailize() // 리팩터링하고 선언/정의 누르면 cpp에서 자동으로 함수 생성
{
mScenes[SCENETYPE::TITLE] = new TitleScene(); //타이틀씬을 동적할당
mScenes[SCENETYPE::PLAY] = new PlayScene(); //플레이씬을 동적할당
for (int i = 0; i < SCENETYPE::END; i++)
{
mScenes[i]->Initiailize(); //씬들이 전부 초기화된다
}
return true;
}
void Application::Update()
{
mScenes[mPlaySceneNumber]->Update(); //Scene을 하나 업데이트한다
}
void Application::Rendering()
{
system("cls"); //common.h 의 window.h 라이브러리에 있는 한번 렌더링하면 한번 지워주는 함수
mScenes[mPlaySceneNumber]->Render();
Sleep(500); // cpu를 (500) = 0.5초 만큼 멈추게 하는 함수
}
void Application::Destroy()
{
for (int i = 0; i < SCENETYPE::END; i++)
{
mScenes[i]->Destroy(); //씬들이 전부 해제된다
}
for (int i = 0; i < SCENETYPE::END; i++)
{
if (mScenes[i] != nullptr)
delete mScenes[i]; // 동적할당된 씬들을 해제
}
}
Application.h (헤더파일)
#pragma once
#include "Common.h"
#include "Scene.h"
enum SCENETYPE
{
TITLE,
PLAY,
END
};
// 싱글턴 패턴 : 생성자가 여러 차례 호출되더라도 실제로 생성되는 객체는 하나
// 최초 생성 이후에 호출된 생성자는 최초의 생성자가 생성한 객체를 리턴
class Application
{
public:
static Application* GetInstance() // static 전역변수처럼 사용이 가능하다
// GetInstance는 null일경우 동적할당을 할 때 쓰인다.
{
if (mInstance == nullptr) //null 일때
{
mInstance = new Application(); //동적할당을 한다
}
return mInstance;
}
public:
bool Initiailize();
void Update();
void Rendering();
void Destroy();
bool GetIsRunning() { return mbRunning; }
void SetPlaySceneNumber(int number) { mPlaySceneNumber = number; }
private:
Application(); //private에 넣어야 못 바꿈
~Application();
void clear();
private:
static Application* mInstance;//클래스내부에 선언, 전역변수처럼 사용가능
bool mbRunning; //bool형은 true(1), false(0)를 저장하는 형식에 자료형
Scene * mScenes[SCENETYPE::END];
int mPlaySceneNumber;
};