- 글로벌 변수선언
// 시간을 구하기 위한 변수들
LARGE_INTEGER g_tSecond; // 초당 클록수 ex) 360 (고정값)
LARGE_INTEGER g_tTime; // 이전 클록수
float g_fDeltaTime; // (현재클록수 - 이전클록수) / 초당 클록수 --> ex 36 / 360
- wWinMain() // 함수내에서...
{
QueryPerformanceFrequency(&g_tSecond); // 초당 클록수 가져오기
QueryPerformanceCounter(&g_tTime); // 이전 클록수 가져오기
}
- void Run() // 함수내에서
{
// Run한번당 36클록만큼 진동한다.
// 1초당 360번 클록이진동한다.
// 그럼 10번 불리겠지 Run은? -> 10프레임(10틱)이라 가정하는것.
// 0.1 * 300 하면 30이겠지 -> Run한번당 1/10 * 300 = 30 이라는 계산이 진행된다.
// 30 * 10 = 300 -> 근데 Run이 총 10번 불리니까 우리가 원하는 300이라는 속도가 1초에 만들어지는 것이다.
// DeltaTime을 구해준다.
LARGE_INTEGER tTime;
QueryPerformanceCounter(&tTime); // 현재 클록수 가져오기
// 호출1번당 이동시간 = 현재와 이전 클록수의 차이 / 1초당 클록수 ex) 36/360
g_fDeltaTime = (tTime.QuadPart - g_tTime.QuadPart) / (float)g_tSecond.QuadPart;
// 그럼... 렉이 아주심하게 생겨서, 다음 Run()이 호출 되는데에 엄청난 딜레이가 생겼다 가정하자
// 현재와 이전 클록수의 차이가 360보다 커지는 경우가 존재할수있을까?
// 뭐 있다고 치자,
// 이때는 조건문등을 이용해 min값을 처리하는등의 문제로 처리할 수 있을 것 같다만
// 이거에대한 고민은 조금더 나중에 해보자.
// 이전시간을 지금시간으로 초기화해준다.
g_tTime = tTime;
// 플레이어 초당 이동속도 : 300
float fSpeed = 300 * g_fDeltaTime;
}
타이머 참고사이트 http://www.tipssoft.com/bulletin/board.php?bo_table=FAQ&wr_id=735