В любой без исключения игре необходимо контролировать время! Это без преувеличения одина из самых важных частей игровой программы.
Основой для нашего таймера станет функция библиотеки SDL — SDL_GetTicks(), которая возвращает число миллисекунд с начала инициализации библиотеки.
Создадим класс:
class Timer{
private:
//время запуска таймера
int startTicks;
//время паузы таймера
int pausedTicks;
//статус таймера
bool paused;
bool started;
public:
//конструктор по умолчанию
Timer();
//методы старта, остановки, паузы и !паузы..
void start();
void stop();
void pause();
void unpause();
//вернёт время таймера
int get_ticks();
//проверяют статус таймера
bool is_started();
bool is_paused();
};
Как видите наш таймер будет уметь всё, что и реальный.
Теперь приступим к реализации:
- конструктор:
Timer::Timer(){
startTicks = 0
pausedTicks = 0;
paused = false;
started = false;
}
- Метод старта:
void Timer::start(){
started = true; // флаг о начале работы
paused = false; /// выключаем паузу
startTicks = SDL_GetTicks(); // время начала
}
- Остановка таймера:
void Timer::stop(){
started = false;
paused = false;
}
- Пауза:
void Timer::pause(){
if( ( started == true ) && ( paused == false ) ){ // если таймер работал
paused = true; /// устанавливаем флаг паузы
pausedTicks = SDL_GetTicks() - startTicks; // запоминаем время работы до паузы
}
}
Отмена паузы:
void Timer::unpause(){
if( paused == true ){ // если таймер на паузе
paused = false; // меняем флаг
startTicks = SDL_GetTicks() - pausedTicks; // устанавливаем новое время начала работы
pausedTicks = 0;
}
}
- Возвращает время работы:
int Timer::get_ticks(){
if( started == true ){
if( paused == true ){
return pausedTicks;
} else {
return SDL_GetTicks() - startTicks;
}
}
return 0;
}
Проверка состояния таймера:
bool Timer::is_started(){
return started;
}
bool Timer::is_paused(){
return paused;
}
Вот так просто реализовывается самый обыденный таймер.


