Таймер на С++ с использованием SDL

В любой без исключения игре необходимо контролировать время! Это без преувеличения одина из самых важных частей игровой программы.
Основой для нашего таймера станет функция библиотеки 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;
}

Вот так просто реализовывается самый обыденный таймер.

Просмотров:   2551

Комментарии

Добавить комментарий

Plain text

  • HTML-теги не обрабатываются и показываются как обычный текст
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Строки и параграфы переносятся автоматически.
CAPTCHA
Введи эти символы. Ато роботы одолели!