Использование таймеров
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()); }} |
[Назад] Содержание [Дальше]