درس 11 : ساخت دو تابع tanzimFPSو ShowFPS

درس 11 : ساخت دو تابع tanzimFPS و ShowFPS

 

ممکن یک بازی بر روی یک کامپیوتر با سرعت 40  فرم در ثانیه(FPS) اجرا شود و روی کامپیوتری دیگر 260فرم بر ثانیه به خاطر پردازنده حافظه گرافیکی و غیره . مثلا اگر دو کامپیوتر رو شبکه  با هم خیلی فرق داشته باشند دچار مشکل می شوید حتی مثال های غیر شبکه . شما در این درس یاد می گیرید FPS بازی خود را خود تعیین کنید

//tedaad e frame haa dar yek saanie

const int FRAMES_PER_SECOND = 20;

timer fps;

این را ما در فایل definations.h می نویسیم که نشانگر مقدار فرمی است که باید در یک ثانیه نشان داده شود و fps هم یک نمونه از کلاس timer هست چون ما  برای تنظیم FPS نیازمند به یک ساعت ثانیه شمار هستیم.

حال میرویم به سراق تعریف تابع tanzimFPS :

void tanzimFPS(int p1,int p2 = FRAMES_PER_SECOND )

{

            if(p1==1)

            {

             //tanzim e frame rate

     while( fps.get_time() < 1000 / p2 )

     {

          //Allaf...  

             }

            }

            else

            ;//Do Nothing

}

این تابع دو متغییر می گیرد و اگر دومی را ندادیم مقدار پیش فرض را می فرستد پارامتر اول تعیین می کند که این تابع فعال باشد یا نه پارامتر دوم هم مقدار FPS را تعیین می کند همه کار این تابع را شرط حلقه while انجام می دهد البته قبلا باید در تابع main ,  fps.start() را نوشته باشیم این حلقه هر مقدار میلی ثانیه که ما بخواهیم تاخیر می اندازد مثلا اگر بخواهیم 20 فرم در ثانیه اجرا شود یعنی هر فرم 1000 تقسیم بر 20 که می شود 50 میلی ثانیه باید تاخیر بیاندازد .این را در فایل functions.h قرار می دهیم.

 

خوب حالا نوبت تابع ShowFPS است :

معمولا این تابع را برای این در بازی ها می گذارند که کاربر با مثلا انتخاب گزینه ای از منو Options بتواند FPS بازی را بر روی کامپیوتر خود ببیند برای اینکه قدرت سخت افزاری کامپیوتر خود را با بقیه بسنجد.

//baraaie mohaasebeie FPS

int frame = 0;

timer update ;

TTF_Font *fpsFont;

SDL_Color textColor = { 0, 0, 0 };

SDL_Surface *fpsSurface = NULL;

این ها را در فایل definations.h می نویسیم frame مقدار فرم ها را در خود نگه می دارد update هم در شمارش به ما کمک می کند fpsFont و fpsSurface هم برای نمایش بر روی صفحه استفاده می شوند textColor هم رنگ سیاه است.

void ShowFPS()

{

         frame++;

        //If a second has passed since the caption was last updated

        if( update.get_time() > 1000 )

        {

            //A temp string

            char charFPS[ 64 ];

           

            //Calculate the frames per second and create the string

            sprintf( charFPS, "%i", frame  );

           

            //Reset the caption

           

   fpsSurface = TTF_RenderText_Blended( fpsFont, charFPS, textColor );

                                   

            //Restart the update timer

            update.start();    frame = 0;

          }

                        apply_surface( 20, 20, fpsSurface, screen );

}

فرم در هر اجرا زیاد می شود درون if بعد از گذشت هر 1 ثانیه اعمالی انجام می دهد در اصل ما می خواهیم بدانیم در هر ثانیه چند فرم اجرا می شود پس در اخر if ما update را reset می کنیم و frame را هم 0 می کنیم در این بین هم ما کار تبدیل frame از integer به char را انجام می دهیم به خاطر این که تابع TTF_RenderText_Blended فقط رشته قبول می کند. سر اخر هم کار چسباندن به screen انجام می شود.

 

 

نظرات 0 + ارسال نظر
برای نمایش آواتار خود در این وبلاگ در سایت Gravatar.com ثبت نام کنید. (راهنما)
ایمیل شما بعد از ثبت نمایش داده نخواهد شد