The OpenNET Project / Index page

[ новости/++ | форум | wiki | теги ]

Каталог документации / Раздел "Программирование, языки" / Оглавление документа

[Назад] Содержание [Дальше]

Использование Simple DirectMedia Layer API

Использование таймеров

  • Получение текущего времени в миллисекундах 

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) как способ оставить CPU текущий временной участок, позволив выполниться остальным потокам. Так чаще всего делают, когда необходимо выпонять свой поток в быстром непрерывном цикле, но также необходимо, чтобы и другие потоки (например, аудио) тоже выполнялись.

 

Пример :

{


    
while
 ( game_running ) {


        UpdateGameState();


        SDL_Delay(TimeLeft());
    }
}
 

[Назад] Содержание [Дальше]


  Закладки на сайте
  Проследить за страницей
Created 1996-2018 by Maxim Chirkov  
ДобавитьПоддержатьВебмастеруГИД  
Hosting by Ihor