[이전] 목차 [다음]

Simple DirectMedia Layer API 사용하기

타이머(Timers)

  • 현재 시간을 천분의 1초 단위로 얻는다

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());
    }
}
 

[이전] 목차 [다음]