목록게임프로그래밍 (83)
bdfgdfg
PeekMessage와 GetMessage의 차이점 GetMessage는 메시지가 없으면 메시지가 올때까지 무한정 기다린다. 게임에서는 메시지처리가 따로없더라도 게임이 돌아가야하기 때문에 GetMessage를 사용하는것은 좋지않다. PeekMessage는 메시지가 있으면 true를 없다면 false를 매번 리턴한다. (물론 인자로 메시지의 주소를 전달하는것은 같다. 메시지가 존재한다면 msg구조체에 메시지를 저장) // 기본 메시지 루프입니다: while (loop) { if (PeekMessage(&msg,nullptr,0,0,PM_REMOVE)) { TranslateMessage(&msg); DispatchMessage(&msg); } else // 윈도우 idle타임. { } } 이런식으로 wina..
비트 플래그 비트 플래그란 여러 옵션, 예로 들어 현재 캐릭터의 상태를 저장하는 bool 변수들이 있다고 보자. 1. 캐릭터가 무기를 장착했는지 안 했는지 2. 캐릭터가 방어구를 장착했는지 안 했는지 3. 캐릭터가 전투 중인지 아닌지 ... 등등 게임의 특징에 따라 매우 많은 옵션들이 달릴 수 있다. 하지만 이렇게 매번 캐릭터의 상태를 확인하기 위해서 bool변수를 선언해놓고 가져다 쓰는 것은 메모리 관리측면에서는 별로 좋지 못하다. 이때 사용할 수 있는 방법이 비트 플래그. 이름에서도 알 수 있듯이 비트를 통해 어떤 상태의 유무(0과 1)를 나타낸다. unsigned int형의 경우는 32개의 상태를 나타낼 수 있는 것. 이제 캐릭터의 상태를 32개가 필요한 상황에서 bool변수 32개(32바이트)를 ..
책을 보지않고 우선 만들어보기. 문제없이 작동. 메인 소스코드 #include "Game.h" #include "Player.h" #include Game::Game() : m_mapData(nullptr),m_gamePlayer(new Player()), m_clear(false), m_count(0) { m_mapData = new int*[MAP_SIZEY]; for (int x = 0; x < MAP_SIZEY; ++x) m_mapData[x] = new int[MAP_SIZEX]; } Game::~Game() { for (int y = 0; y < MAP_SIZEY; ++y) delete[] m_mapData[y]; delete[] m_mapData; delete m_gamePlayer; } b..
Win32 API - WinMain,WndProc가 주요. - Winmain -> 윈도우 구조체 등록,생성 -> 메시지 루프, 메시지 체크와 전달 -> os에서 관리하는 메시지 큐를 통해 들어온 메시지를 들어온 순서대로 처리한다. -> WinMain함수는 메시지 루프에서 무한반복을 하고 메시지큐에 종료를 하라는 메시지가 들어오면 반복문을 탈출하면서 종료 WndProc - 메시지를 처리한다 LRESULT CALLBACK WndProc(HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam) { HDC hdc; PAINTSTRUCT ps; RECT rcLine = { 50, 50, 700, 150 }; //선의 좌표영역 RECT rcEllipse = { 50, 300, 7..