SDL_GetTicks() 는 지난 임의의 시간으로부터 지금까지 몇
밀리세컨드(milliseconds)가 지났는지 알려준다.
팁:
일반적으로, 게임을 구현할 때 프레임률보다는 시간에 기반하여
게임상의 객체를 움직이는 것이 더 낫다. 그렇게 하면 빠른 시스템이나 느린
시스템이나 동일한 속도로 게임을 즐길 수 있다.
예제:
#define TICK_INTERVAL 30
Uint32 TimeLeft(void)
{
static Uint32 next_time = 0;
Uint32 now;
now = SDL_GetTicks();
if ( next_time <= now ) {
next_time = now+TICK_INTERVAL;
return(0);
}
return(next_time-now);
}
지정된 밀리세컨드만큼 기다리기
SDL_Delay() 는 몇 밀리세컨드만큼 기다리게 한다.
SDL이 지원하는 운영체제들은 멀티태스킹 운영체제이기 때문에, 애플리케이션이
요구된 시간만큼 정확히 지연된다는 보장을 할 수 없다.
이 함수는 특정 시간에 다시 진행되어야 하는 경우보다는 잠깐동안
정지해있어야 하는 경우에 더 적합하다.
탑:
대부분의 운영체제들은 약 10ms 정도의 스케줄러 시간조각(timeslice)을 가진다.
SDL_Delay(1) 는 현재의 시간조각에 해당하는 시간조각을 희생하여 다른
쓰레드가 실행될 수 있도록 사용된다. 이 함수는 아주 빨리 돌아가는
루프의 쓰레드가 있을 때 다른 쓰레드(오디오 같은)도 함께 실행되어야
한다면 중요하다.
예제:
{
while ( game_running ) {
UpdateGameState();
SDL_Delay(TimeLeft());
}
}