سلام!

این جلسه می خواهیم با دستور های موجود در SDL1.2 یک Timer بنویسیم. اوّل از همه با تابع زیر آشنا شوید؛

Uint32 SDL_GetTicks();

این تابع مقدار زمانی را که از Initialize کردن SDL می گذرد را در قالب میلی ثانیه برمی گرداند. پس دقت داشته باشید که اگر خروجی این تابع مقداری منفی یا نامربوط بود، حتما SDL را Initialize نکرده اید.

خب، حالا می خواهیم Timer را پیاده سازی کنیم.

class Timer{
};

در این کلاس باید یک متغیر باشد که زمان ساخته شدن Timer را در آن ذخیره کنیم.

سپس به یک تابع نیاز داریم تا میزان زمان گذشته را از زمان ساخته شدن Timer به ما بدهد. این عدد همان تفاضل زمان کنونی و زمان اوّلیّه است.

class Timer{
    private:
        
        Uint32 _startingTime;
        
    public:
        
        Timer() : _startingTime( SDL_GetTicks() ) {}
        Uint32 time() const;
        
        Uint32 startingTime() const;
        
        void setStartingTime( Uint32 );
};

Uint32 Timer::startingTime() const{
    return this->_startingTime;
}

void Timer::setStartingTime( Uint32 startingTime ){
    this->_startingTime = startingTime;
}

Uint32 Timer::time() const{
    return SDL_GetTicks() - startingTime() ;
}

این کلاس نکته ی خاصی ندارد. تنها نکته ی آن همین تابع SDL_GetTicks است که با آن آشنا شدید.

برای تمرین، کد Timer را یک بار دیگر خودتان بنویسید. اگر با مشکلی مواجه شدید، در قسمت نظرات مطرح کنید.

موفق باشید!