[前一页] 目录 [后一页]

使用SDL

定时器

  • 取得当前时间(毫秒级)

调用SDL_GetTicks() 可以获得从过去某个时刻到现在所经过的毫秒。

提示:
总的来说,在游戏开发中基于时间,而不是帧率来移动对象要更好。这样在高速系统上和在低速系统上,游戏的节奏是一致的。
例程::
#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支持的操作系统是多任务的,所以无法保证你的程序能够等待非常确切的一段时间。 等待相关的函数更多的是用于程序空闲一段时间,而不是在一个很确切的时刻被唤醒。

提示:
很多操作系统的调度时间片是10毫秒左右。调用SDL_Delay(1)将放弃当前的时间片。如果你的一个线程是很紧的循环,同时又要保持另一个线程(比如音频)运行,这就很有用。
例程:
{
    while ( game_running ) {
        UpdateGameState();
        SDL_Delay(TimeLeft());
    }
}
 

[前一页] 目录 [后一页]