'MyProject'에 해당되는 글 23건

  1. 2017.04.06 June_Engine #1_EngineSystem
  2. 2017.04.06 June_Engine #1_WinMain
  3. 2017.04.05 June_Engine #1_메뉴얼(Manual)
posted by REDFORCE 2017. 4. 6. 17:18

#1. Engine System

 + WinMain - EngineSystem (현재 글)

 + EngineCore

 + EngineError

 + MainNode


#2. FrameWork

 + Grahpics

 + Image - SpriteData

 + Layer

 + Input

 + Game

 + Manager

 + Game Interface

 + Utility


#3. Testing Module

 + 2D Image Test

 + 2D Animation Test

 + Game UI Test


-----------------------------------------------------------------------


이어서 WinMain - EngineSystem 두번째 글 입니다.


EngineSystem.h 부터 살펴보도록 하겠습니다.



헤더 구성은 주요 함수 내용은 


 + 생성자 / 소멸자

 + bool engineStart ( )           // 엔진 시작 전 초기화 지점

 + int Run ( )                       // 엔진 런

 + bool CreateWindowMain    // 메인 Window 화면 생성 함수

 + LRESULT EngineProc( )       // 메인 프로시져


이 있습니다. 

(위의 내용에는 파라미터가 생략되어있습니다. 정확한건 Gist로 올려둔 코드를 보시기 바랍니다)



생성자와 소멸자에선 딱히 하는 일이 없기 때문에 생략합니다.




첫 번째 함수인 bool engineStart( ) 함수부터 살펴보겠습니다.


engineStart 함수에서는 먼저 FILEMANAGER->initialize( ) 가 수행됩니다.


FILEMANAGER는 본 편에서 다룰 내용은 아니지만 간단히 설명하자면


프로젝트가 구동 될 때 읽어 들일 Resource 폴더내의 내용을 긁어오는 녀석이라 보시면 됩니다.

Singleton 패턴으로 선언되어있으며 추후 엔진에서 어떤 리소스에 대한 내용을 다시 불러올 때 사용 됩니다.



그리고 ::pEngine = this; 는 앞으로 사용 될 엔진의 static 함수인 메인 프로시져를 수행하기 위한 용도 입니다.


그리고 핵심 부분인 


EngineCore engineCore;

if (engineCore.initialize()) //This is Not Meaning Anything Until Develop Component Based System

{

try

{

// Create Engine-Main Window

if (CreateMainWindow(g_hWndEngine, hInstance, nCmdShow) == false)

throw(EngineError(engineErrorNS::ENGINE_CORE_ERROR, "Engine Main Window Create Failed"));


success = true;

}

catch (const EngineError &err)

{

MessageBox(g_hWndEngine, err.getMessage(), "Error", MB_OK);

}

}


에서 EngineCore를 선언 및 수행하게 되며 engineCore.initializer() 에서 return 받은 값이 true 면

엔진 루프를 실행 할 준비가 되었다는 뜻 입니다.


따라서 Main Window를 이때 생성하게 되는데요.

CreateMainWindow 함수를 통해 메인 HWND를 통해 WinMain에서 받아온 hInstance값을 통해 화면을 만들게 됩니다.


여기까지 작업이 잘 끝났다면 return success를 돌려주게 되겠지요.


아래는 위에 engineStart 과정에서 사용 한 CreateMainWindow 함수와 EngineProc ( 프로시져 ) 입니다.




그리고 두 번째 핵심 부분인 engineRun ( )을 살펴보겠습니다.



engineRun( ) 에서는 게임의 


Game의 DirectX 를 얹기 위해 Graphics 클래스와

Scene의 루트 노드라 부를 수 있는 MainNode를 생성합니다.


각각 initialize( ) 함수를 통해 초기화를 진행하고 메인 노드의 초기화가 끝나면


이제 메세지 루프를 돌게 됩니다.


메세지 루프는 window가 생성되면서 연결시켜주었던 프로시져를 통해 


메세지 루프를 돌게 되며 PeekMessage가 없으면

메인노드의 Update 함수를 수행합니다.


try - Catch 구문으로 감싸져 있는 스코프 부분이 루프 영역입니다.



그리고 혹여나 어떤 에러가 발생하면 Catch 구문으로 가서 에러를 띄워주고 메인 Window를 다시 파괴하고 모든 것들을 릴리즈 시킵니다.



아마 여기까지는 일반적인 WinAPI 게임 구조의 형태와 비슷하기 때문에


Initialize -> Update -> Render 로직을 따라 가시면 쉽게 이해하실 수 있을거라 생각드네요.




여기까지가 EngineSystem Class에 대한 내용이었습니다.


혹여나 잘 이해가 안가시는 부분이 있다면 질문주시면 성의껏 답변해드리겠습니다.



전체 cpp 코드는 아래에 적어두었습니다.


'MyProject > SephyEngine' 카테고리의 다른 글

June_Engine #1_EngineError.h  (0) 2017.04.07
June_Engine #1_EngineCore.cpp (2)  (0) 2017.04.07
June_Engine #1_EngineCore.h (1)  (0) 2017.04.06
June_Engine #1_WinMain  (0) 2017.04.06
June_Engine #1_메뉴얼(Manual)  (0) 2017.04.05
posted by REDFORCE 2017. 4. 6. 16:50

#1. Engine System

 + WinMain - EngineSystem (현재 글)

 + EngineCore

 + EngineError

 + MainNode


#2. FrameWork

 + Grahpics

 + Image - SpriteData

 + Layer

 + Input

 + Game

 + Manager

 + Game Interface

 + Utility


#3. Testing Module

 + 2D Image Test

 + 2D Animation Test

 + Game UI Test


-----------------------------------------------------------------------


이번 글에서는 엔진이 시작하기 까지의 Main 함수의 구성과 Engine System Class에 대해서 살펴보도록 하겠습니다.



아래의 winMain을 살펴보시면 간단하게 다음과 같습니다.


메인의 구성은 간단하게 EngineSystem Class 하나를 갖고 있고


WINAPI WinMain( ) 함수가 실행되면서 프로그램의 진입점이 정의되어 있습니다.



그리고 그 외 갖가지 글로벌 변수들에 대한 초기화가 이루어져 있습니다.


글로벌 변수들에 대한 설명은 추후 stdafx.h (미리 컴파일 된 헤더) 를 설명 할때 같이 설명하도록 하겠습니다.



    // Check for memory leak if debug build

    #if defined(DEBUG) | defined(_DEBUG)

        _CrtSetDbgFlag( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF );

    #endif


는 메무리 누수가 발생했을 시 디버그 모드 환경에서 결과를 출력하기 위해 사용하는 함수 입니다.


프로그램이 종료 시 프로젝트에서 누수 된 메모리 주소영역들이 우르르 나오게 됩니다.


해당 누수 된 메모리를 체이스 하는 방법에 대해서는 별도의 글로 적어놓도록 하겠습니다.


if (!engine.engineStart(hInstance, nCmdShow))

return 1;

위와 같이 EngineStart 함수를 호출하고 return 받은 값이 true 이면


아래의 return engine.run();


함수를 호출하여 엔진을 Run 시킵니다.


이번 글에서는 간단히 메인만 남겨두고 계속해서 다음 글로 적어나가도록 하겠습니다.

(왠만하면 클래스 별로 글을 나눠서 올릴 예정입니다)

'MyProject > SephyEngine' 카테고리의 다른 글

June_Engine #1_EngineError.h  (0) 2017.04.07
June_Engine #1_EngineCore.cpp (2)  (0) 2017.04.07
June_Engine #1_EngineCore.h (1)  (0) 2017.04.06
June_Engine #1_EngineSystem  (0) 2017.04.06
June_Engine #1_메뉴얼(Manual)  (0) 2017.04.05
posted by REDFORCE 2017. 4. 5. 17:13

본 글은 2D Game Engine(이하 June_Engine)에 대한 설명 글 입니다.


June Engine의 메뉴얼은 여러 번의 포스팅으로 나눠서 정리 될 예정이며

소스 코드 재작성 / 자유로운 사용 여부 / 상업적인 목적 등

어떠한 저작권 문제도 삼지 않으니 자유로이 이용하셔도 됩니다.

다만 본 엔진을 사용 또는 참조 시 출처에 대해서 본 블로그에서 참조 하였음을 꼭 기재하여 주셨으면 합니다.


(저자 : 은고 / redforce01@naver.com)



※ 엔진에 대한 각 항목별 설명은 다음 포스트부터 이어집니다.
이하 아래 내용은 June Engine에 대해서 간략히 설명합니다.


1. Introduced

 - 본 엔진은 WinAPI 기반 DirectX를 활용하여 제작한 2D Game Engine 입니다.
교재 2D Game Programming(저자 : 찰스 캘리. 에이콘)을 참고하여 직접 여러 항목들을 개발해가며 제작하였습니다.


 - 프로젝트 코드는 Github에서 다운로드 할 수 있습니다. (링크 : DirectX_Engine)


현재 제공하는 기능에 대한 내용을 간단히 정리하면 다음과 같습니다.


 + Rendering (2D Image / 2D Animation 지원)

 + 자동 리소스 입력(프로젝트 시작 시 Resource 폴더 검사)

 + 2D UI Framework 제공(Button / Tab / ProgressBar / Frame / Text 등)

 + 멀티 쓰레드 환경 제작 지원(Core Thread / Worker Thread 분리)

 + Key 입력 처리

 + Game Scene 관리

 + Graphics Class를 통한 DirectX 생성(설명은 메뉴얼 참조바랍니다)

 


※ 주의 사항들


 + Sound 입출력은 지원하지 않습니다(추후 FMOD를 탑재할 예정)

 + Auto Resource Check 코드는 1단계 폴더까지만 검색합니다(다단계 폴더 지원은 예정 없음)

 + 일부 프레임워크의 코드 또는 엔진이 동작함에 있어 버그가 있을 수 있습니다.
    버그 발견 시 문의 주시면 해당 버그를 개선 및 고치는데 노력하도록 하겠습니다.



2. Content

 - 프로젝트 폴더 별, 주요 항목들은 다음과 같이 분류 됩니다.


 - Framework

  + Console (InGame Console 창)

  + Game (Game Scene)

  + GameInterface (Game User Interface)

  + Grahpics (DirectX Graphics)

  + Image (2D Image)

  + Input (Key Input)

  + Manager (Framework Managers)

  + Text (InGame Text)

  + Util (Framework Utilities)


 - Engine Managers (현재 미 포함)

  + Component Based 방식을 지원할 예정이었으나 아직 개발중..


 - System Code

  + Engine Main

  + Engine Core

  + Engine Worker Thread

  + Engine GameNode


 - Testing Module

  + Scene Test

  + Interface Test

  + Tab Test

  + 2D Image Test

  + 2D Animation Test



3. 추후 업데이트 예정 항목

 - 아래 항목은 시간 나는대로 개발 할 의사가 있는 내용들 입니다.


 - Framework

  + SoundManager(FMOD)

  + Excel File Loader


 - InGame Code

  + Zoom In/Out Control Function

  + Camera Function

  + InGame ScreenShot Function


 - MapTool

  + Isometric / Rectangle Tile 지원

  + Win32 API Interface Framework 지원

'MyProject > SephyEngine' 카테고리의 다른 글

June_Engine #1_EngineError.h  (0) 2017.04.07
June_Engine #1_EngineCore.cpp (2)  (0) 2017.04.07
June_Engine #1_EngineCore.h (1)  (0) 2017.04.06
June_Engine #1_EngineSystem  (0) 2017.04.06
June_Engine #1_WinMain  (0) 2017.04.06