Using SDL: 타이머

[이전] 목차 [다음] # 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());
        }
    }
[이전] 목차 [다음]