(2022) 공부 (Study)/게임 개발 (Development) 17

Win32API - Windows App : 메모리 누수 체크 함수

C++에서 코드를 작성하다 보면, 동적 할당 된 메모리 관리에 대해 잘하고 있는지 의문이 들 때가 있다. 그럴 때에 사용하면 유용한 Windows 내장 함수를 알아보자. int APIENTRY wWinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _In_ LPWSTR lpCmdLine, _In_ int nCmdShow) { // 메모리 누수(Lead) 체크 _CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF); //_crtBreakAlloc(); // Memory Leak 유발 코드 한 줄 int* iTestValue = new int(); ... } Windows App의 mai..

Win32API - 출력 디렉터리 및 리소스 경로 관리

[1] Output 경로 관리 프로젝트 속성 ➝ 구성 속성 ➝ 일반 ➝ 출력 디렉터리 &(SolutionDir) : Solution(.sln) 파일이 위치한 경로 &(Platform) : 플랫폼 이름의 폴더 x64 or x32 &(Configuration) : 구성 이름의 폴더 Debug or Release 구성 형식 : (App이름).exe 형태 ➝ 원하는 이름으로 수정한 결과물을 낼 수도 있다. (ex. MapleStory.exe) Release x64의 경우, bin_debug가 아닌 bin으로 설정하였다. 출력된 결과 모습이다. [2] Resource 경로 관리 추후에 Output 폴더 내부의 bin 폴더만 통채로 배포하면, 게임을 구동시킬 환경을 옮길 수 있는 것이 된다. 그러므로, Resour..

[Win32API] 임시

※ 이번 포스팅의 Source Code는 아래 git 링크에서 볼 수 있습니다. ※ https://github.com/nr97819/Win32_ASTR_Lecture/tree/Lecture-13 GitHub - nr97819/Win32_ASTR_Lecture: Win32_ASTR_Lec Win32_ASTR_Lec. Contribute to nr97819/Win32_ASTR_Lecture development by creating an account on GitHub. github.com define.h // Player, Missile, Enemy, 등을 그룹으로 나누는 enum enum class GROUP_TYPE { DEFAULT, PLAYER, MISSILE, MONSTER, END = 32 //..

[Win32API] GetAsyncKeyState() 와 키 입력 받기 (3)

https://soonang2.tistory.com/30 [Win32API] GetAsyncKeyState() 와 키 입력 받기 (2) https://soonang2.tistory.com/28 [Win32API] GetAsyncKeyState() 와 키 입력 받기 (1) 이번에는 가상 키 값과 키보드 입력을 받는 방법에 대해서 알아보겠습니다. _getch() 함수는 가장 마지막에 입력한 값만 받.. soonang2.tistory.com ※ 이전 포스팅과 이어지는 내용이므로, 먼저 읽고 오시는 것을 추천드립니다. ※ ※ 이번 포스팅의 Source Code는 아래 git 링크에서 볼 수 있습니다. ※ https://github.com/nr97819/Win32_ASTR_Lecture/tree/Lecture-1..

[C++] 정적(static) 키워드의 개념과 활용

1. 정적(static) 멤버 변수 - class 내에서 선언만 가능, 정의는 불가능 - 전역 scope에서만 정의(초기화) 할 수 있다. * 모든 객체가 공유해야 하므로, 프로그램 전체 영역에서 메모리가 유지되어야 한다. * 선언은 class 영역에서 되어지지만, 정의는 파일 영역(전역)에서 수행된다. * 해당 class의 멤버 함수, 혹은 friend class만 접근 가능하다. @ static 멤버 변수의 초기화는, header 파일이 아닌, cpp 파일에서 해주어야 한다. (include할 때마다, 초기화가 되는 비효율적인 동작 방지) 프로그램 전체 영역에서 메모리가 유지되어야 하므로, cpp 파일에서 별도 초기화를 해줘야 한다. CCore::m_app = nullptr; ※ class 내부에서는..

[Win32API] Bitmap에 대한 정리 (2) - bitColor 수정 및 출력

bitColor를 24비트에서 32비트로 변경해서 출력하는 예제이다. [중요 포인트] bitmap은 stride라는 값을 지켜주어야 하는데, (꼭 bitmap만 그런 것은 아니다.) stackOverFlow 등을 찾아보면 그래픽 메모리가 처리하기 편리한 값으로서 Multiple of Four, 즉, 각 행의 bytes 수가 4의 배수 값이어야 한다는 내용이 있었다. 이번에는 24bits의 bitColor 값을 가진 bitmap 이미지를 32bits로 수정했었기에, 32bits / 4 = 8its로 어차피 잘 나누어떨어져서 stride를 고려할 필요는 없었지만, 추후에 32bits를 24bits로 변경하게 된다면, stride가 4의 배수 값을 지켜줘야 하는 것을 잘 기억해야 할 것 같다. 참고로, 간단하..

[Win32API] Bitmap에 대한 정리 (1) - Bitmap 구조 및 역할

DibSection( ), DDB(Dependent), DIB(Independent), Bitmap Stride(Multiple of 4), bitCount, 등, 비트맵의 세부 구조를 변경하는 메모리 실습을 하는데에 필요했던 정보들을 모아놓았다. 포스팅을 읽기 전에 참고하면 좋은 자료. https://docs.microsoft.com/ko-kr/windows/win32/learnwin32/windows-coding-conventions Windows 코딩 규칙 - Win32 apps Windows 프로그래밍을 처음 접하는 경우 Windows 프로그램을 처음 볼 때 이 프로그래밍이 방해가 될 수 있습니다. docs.microsoft.com Bitmap에 대한 유용한 자료들을 제공해준 사이트들. https..

2진수 그리고 16진수에 대한 정리

포스팅을 읽기 전에 참고하면 좋은 자료. https://docs.microsoft.com/ko-kr/windows/win32/learnwin32/windows-coding-conventions Windows 코딩 규칙 - Win32 apps Windows 프로그래밍을 처음 접하는 경우 Windows 프로그램을 처음 볼 때 이 프로그래밍이 방해가 될 수 있습니다. docs.microsoft.com [Graph of Decimal - Hexadecimal - Binary] d hex bin d hex bin d hex bin 0 0x00 0000 0000 64 0x40 0100 0000 128 0x80 1000 0000 1 0x01 0000 0001 65 0x41 0100 0001 129 0x81 1000 ..

[Win32API] GetAsyncKeyState() 와 키 입력 받기 (2)

https://soonang2.tistory.com/28 [Win32API] GetAsyncKeyState() 와 키 입력 받기 (1) 이번에는 가상 키 값과 키보드 입력을 받는 방법에 대해서 알아보겠습니다. _getch() 함수는 가장 마지막에 입력한 값만 받을 수 있으므로, 대각선 이동을 구현할 수 없습니다. switch(wParam) / case WM_ soonang2.tistory.com 이전 포스팅을 보고 오시는 것을 추천드립니다. 이번 포스팅에 해당되는 코드는 아래 git에서 확인 가능하다. https://github.com/nr97819/Win32_ASTR_Lecture/tree/Lecture-12 (강의 13으로 교체 필요) void CCore::update() { Vec2 vPos = g..