Hemen her oyun’da, saniyede çizilen ekran sayısı (FPS - Frame Per Second) bilgisi oyun penceresinde gösterilir.
FPS nedir?
FPS, oyunun bir saniye içerisinde oyun penceresine çizebildiği ekran sayısıdır. Bizim animasyon olarak gördüğümüz akışlar aslında ardı ardına hızlı bir şekilde çizilen tek kare resimlerdir.
Sinema filmleri bile aslında ekranda sırayla gösterilen tek kare resimlerden oluşmaktadır.
İnsan gözü, saniye 25 kare’den büyük hızlarda tek kare resimleri, bir akış olarak algılar.
XNA Framework, saniyede 60 kare ekran çizmeye çalışır.
Oyunlarımızda FPS nasıl hesaplarız?
Formül aslında basit, Draw() method’unda bir değişkenin değerini 1 arttıracağız. Update() method’unda her saniye geçişinde değişkeni sıfırlayacağız.
FPS bilgisini ekranda nasıl gösteririz?
Draw() method’unda değişkenin değerini ekranda gösterirsek, bir saniye içerisinde kaç defa Update() method’unun çalıştırıldığını, yani saniyedeki ekran sayısını (FPS) göstermiş oluruz.
Şimdi yazacağımız örnek projede, klavyeden boşluk (space) tuşuna basıldığında FPS bilgisini ekranda göstereceğiz, tekrar basıldığında gizleyeceğiz.
Örnek proje
Öncelikle sınıf seviyesinde değişkenlerimizi oluşturalım;
int SaniyedeKareSayisi = 0; double FPS = 0; bool DetayGoster = false; KeyboardState pks;</pre>
Update() method’unda FPS hesaplayalım;
KeyboardState ks = Keyboard.GetState(); if (pks.IsKeyDown(Keys.Space) && ks.IsKeyUp(Keys.Space)) { DetayGoster = !DetayGoster; } if (DetayGoster && gameTime.TotalGameTime.Milliseconds == 0) { FPS = SaniyedeKareSayisi; SaniyedeKareSayisi = 0; } pks = ks;
Oyun penceresinde yazı gösterebilmek için, SpriteFont sınıfından bir değişkene ihtiyacımız olacak.
SpriteFont Arial;
Content projemize Arial isminde bir SpriteFont dosyası ekleyelim.
<?xml version="1.0" encoding="utf-8"?> <XnaContent xmlns:Graphics="Microsoft.Xna.Framework.Content.Pipeline.Graphics"> <Asset Type="Graphics:FontDescription"> <FontName>Arial</FontName> <Size>24</Size> <Spacing>0</Spacing> <UseKerning>true</UseKerning> <Style>Regular</Style> <CharacterRegions> <CharacterRegion> <Start> </Start> <End>~</End> </CharacterRegion> </CharacterRegions> </Asset> </XnaContent>
LoadContent() method’unda Arial değişkenimize değer atayalım;
Arial = Content.Load("Arial");
Draw() method’unda hesaplanan FPS bilgisini ekranda gösterelim;
spriteBatch.Begin(); if (DetayGoster) { SaniyedeKareSayisi++; spriteBatch.DrawString(Arial, "FPS : " + FPS.ToString(), new Vector2(50, 50), Color.Black); } spriteBatch.End(); Artık oyun penceremizde *saniyedeki ekran sayısını* (**FPS**) gösterebiliriz. ![XNA Oyun Programlama - FPS Hesaplama Sonucu](/assets/uploads/2011/07/FPSGameScreen.png "XNA Oyun Programlama - FPS Hesaplama Sonucu") Oyunun kodlarını indirmek için tıklayınız.
Senior Software Engineer, @Microsoft
Ada ve Ege'nin babası ;)
Makale Adedi: 484