게임 내 시간 체크(QueryPerformanceCounter)

Programming/기타|2019. 2. 27. 10:51
반응형


안녕하세요~

게임을 할 때 시간, 프레임 체크가 엄청 중요한데요.

0.몇 초 안에 우승, 준우승이 갈리기도 하니까요~

 

여튼 게임 내 시간체크를 할 때는 아래와 같이

LARGE_INTEGER 구조체와 cpu클럭을 이용한 걸 이용합니다.

API이 GetTickCount나 timeGetTime을 쓰기도 하지만 정확도는 떨어지기 때문에 잘 사용하지 않습니다~


 

선언



#include <winnt.h>

 

LARGE_INTEGER m_CurrentTime;
LARGE_INTEGER m_LastTime;
LARGE_INTEGER m_CpuTick;
float    m_fTimeDelta;



위와 같이 변수 선언을 해줍니다.

 

 

 


초기화



QueryPerformanceCounter(&m_CurrentTime);
QueryPerformanceCounter(&m_LastTime);
QueryPerformanceFrequency(&m_CpuTick);

 


위와 같이 현재시간과 마지막에 기록할 시간을 QueryPerformanceCounter로 가져오고 CPU클럭은 Frequency로 가져옵니다.

 

 

 

경과시간 연산



QueryPerformanceCounter(&m_CurrentTime);      // 현재 시간 갱신 

// 현재시간 - 갱신시간/cpu클럭

m_fTimeDelta = (float(m_CurrentTime.QuadPart) - float(m_LastTime.QuadPart)) / float(m_CpuTick.QuadPart);  

m_LastTime = m_CurrentTime;                        // 마지막 시간 현재 시간으로 교체

 


m_fTimeDelta를 사용해 누적시켜 몇 초후를 알 수 있습니다.

감사합니다.

반응형

댓글()