자습

220714_1_기본 틀 작업 2

hyrule 2022. 8. 20. 23:01

공용 헤더폴더 자동으로 포함시키기

  • 지난 시간에 빌드 후에 자동으로 프로그램을 복사해주는 기능까지 구현했었다.
  • 이제 이 자동 복사된 파일들을 다른 프로젝트에서 자동으로 포함(include) 시키는 기능을 구현해야 하는데, 비주얼 스튜디오에 이 기능이 이미 있다.
  • Client2D 프로젝트에서 자동으로 AR41Engine 프로젝트의 라이브러리 파일과 헤더 파일이 포함되도록 설정해 준다.

> 포함 디렉터리 지정

→ 이 기능을 사용할 프로젝트→속성→VC++ 디렉터리로 들어가서 ‘포함 디렉터리’에 프로젝트에서 공용 헤더파일을 옮겨놓는 폴더인 ../../Engine/Include/ 폴더를 지정해 준다.

** 프로젝트 파일(.vcsproj) 파일이 있는 디렉터리를 기준으로 한 상대 경로로 지정해주면 된다.


> 라이브러리 디렉터리(.lib)파일

→ 마찬가지로 .lib 파일이 있는 폴더인 ../Bin/ 폴더를 포함시킨다.


> main.cpp 함수에서 포함시키기

  • Debug와 Release 모드에서 다른 라이브러리가 링크되도록 설정해 준다.
#include "Engine.h"
#include "resource.h"

#ifdef _DEBUG

#pragma comment(lib, "AR41Engine_Debug.lib")

#else

#pragma comment(lib, "AR41Engine.lib")

#endif // _DEBUG


> 이 작업을, Client2D 프로젝트와 Editor 프로젝트 두 프로젝트에서 해 준다.

  • 이제 Client2D 프로젝트에서 CEngine 클래스를 사용할 수 있게 되었다.

Client2D main.cpp 설정

코드 전문

#include "Engine.h"
#include "resource.h"

#ifdef _DEBUG

#pragma comment(lib, "AR41Engine_Debug.lib")

#else

#pragma comment(lib, "AR41Engine.lib")

#endif // _DEBUG


int APIENTRY wWinMain(_In_ HINSTANCE hInstance,
    _In_opt_ HINSTANCE hPrevInstance,
    _In_ LPWSTR    lpCmdLine,
    _In_ int       nCmdShow)
{
    if (!CEngine::GetInst()->Init(hInstance, TEXT("Client2D"), TEXT("Client2D"), IDI_ICON1,
        IDI_ICON1, 1280, 720, 1280, 720, true))
    {
        CEngine::DestroyInst();
        return 0;
    }

    int Ret = CEngine::GetInst()->Run();

    CEngine::DestroyInst();

    return Ret;
}

> CEngine 초기화

  • 창 이름은 “Client2D”로 설정한다.
  • 아이콘에 쓰일 리소스는 직접 추가해주어야 한다.

    • 이렇게 해주면 resources.h 헤더가 생성되고, 이 헤더를 포함시켜준 뒤
    #define IDI_ICON1                       101

    → 이 매크로를 매개변수로 주면 된다.

  • 해상도는 일단 HD 해상도, 창모드로 설정해 준다.

  • 초기화 실패 시 도로 제거하고 return

> 코드

if (!CEngine::GetInst()->Init(hInstance, TEXT("Client2D"), TEXT("Client2D"), IDI_ICON1,
        IDI_ICON1, 1280, 720, 1280, 720, true))
    {
        CEngine::DestroyInst();
        return 0;
    }


> 실행

int Ret = CEngine::GetInst()->Run(); //루프 반복

CEngine::DestroyInst(); //루프 종료 시 메모리 할당 해제 후 return

return Ret;


CEngine의 생성자에서 메모리 릭 체크 설정

CEngine::CEngine()	:
	m_hInst(0),
	m_hWnd(0),
    m_WindowRS{}
{
    _CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF);
    //_CrtSetBreakAlloc(100);
}

> 벡터의 내적, 외적, 행렬, 제1코사인법칙, 제2코사인법칙 등 이론 공부


Uploaded by N2T