1. CPP 기반 프로젝트생성
2. 최종빌드 경로, 중간 파일 경로 지정

3. 메인 루프 기본 함수 구성
namespace Craft
{
class Engine {
public:
Engine();
virtual ~Engine();
// 게임 루프 실행 함수
void Run();
// 엔진 종료함수
void Quit();
protected:
// 입력 처리 함수.
void ProcessInput();
// 초기화 함수
// 레벨 초기화 함수.
// 엑터 초기화 함수.
void OnInitialized();
// 업데이트 함수.
void BeginPlay();
// 렌더링.
void Tick(float deltaTime);
// 이전 입력을 저장하는 함수.
void Draw();
// 엔진 종료 시 정리 함수.
void SavePreviousInputStates();
// 엔진 종료 시 정리
void ShutDown();
};
}
Engine::Run() 함수
더보기
Engine.cpp
void Engine::Run()
{
// 윈도우즈가 제공하는 고해상도 타이머(하드웨어 타이머)
// QueryPerformanceFrequency : 타이머의 해상도
// ex: 밀리세컨트 (1/1000)해상도 = 1000.
LARGE_INTEGER frequency;
QueryPerformanceFrequency(&frequency);
// 현재 시간 확인.
LARGE_INTEGER counter;
QueryPerformanceCounter(&counter);
// 프레임 시간 계산을 위한 변수.
int64_t currentTime = counter.QuadPart;
int64_t previousTime = currentTime;
// 프레임 고정.
float oneFramTime = 1.0f / setting.framerate;
while (!isQuit)
{
// 입력 처리.
ProcessInput();
// 현재 시간 확인.
QueryPerformanceCounter(&counter);
// 현재 시간 저장.
currentTime = counter.QuadPart;
// 프레임 시간 계산.
float deltaTime = static_cast<float>(currentTime - previousTime) / static_cast<float>(frequency.QuadPart);
if (deltaTime >= oneFramTime)
{
//레벨 초기화 이벤트 함수.
OnInitialized();
//레벨의 액터 초기화 이벤트 함수.
BeginPlay();
// 레벨의 액터 업데이트 함수.
Tick(deltaTime);
// 업데이트된 결과를 화면에 그리는 함수.
Draw();
// 처리된 입력을 이전 프레임 입력으로 저장.
SavePreviousInputStates();
// 이전 프레임 시간
previousTime = currentTime;
}
}
// 정리.
ShutDown();
}
알아둘 것
더보기
- QueryPerformanceCounter()가 반환하는 값은 ms, sec가 아니라 tick 개수
- float oneFramTime = 1.0f / setting.framerate : 프레임 고정을 위한 처리
- Engine클래스를 전역 객체를 instance로 처리 (싱글턴)
- struct EngineSetting : 구조체, 엔진 세팅값등을 정의 ( framerate 등등)
4. 실행 결과물
빌드파일
\ConsoleGameProject\Bin\Debug\CraftEngine

중간파일
\ConsoleGameProject\Intermediate\Debug\CraftEngine

강의 : 인프런 C++로 만드는 게임 엔진 프레임워크
'엔진프레임워크 만들기' 카테고리의 다른 글
| C++ 엔진프레임워크 - 3 입력 시스템 (0) | 2026.08.31 |
|---|---|
| C++ 엔진프레임워크 - 2 레벨, 엑터 구성 (0) | 2026.08.24 |
