Pencere Açmak

Bu eğitselde, SFML Window bileşenini asgari bir pencereleme sistemi olarak nasıl kullanabileceğimizi göreceğiz.

Pencere bileşeni için SFML/Window.hpp başlık dosyasını uygulamamıza dahil ediyoruz.

Bu başlık Window bileşenini kullanmak için ihtiyacımız olan tek şeydir. Bu diğer bileşenler için de geçerlidir, eğer AAA bileşenini kullanmak isterseniz SFML/aaa.hpp başlık dosyasını uygulamanıza dahil etmeniz yeterlidir.

Şimdi de meşhur main fonksiyonumuzu tanımlayalım:
int main()
{
    // Biri buraya kod yazsa ne süper olur
}
Eğer komut satırı parametreleri kullanmak istersek:
int main(int argc, char** argv)
{
    // Usta, masayı donatıver
}


İlk Pencerem
Şimdi bir pencere oluşturmaya başlayalım. SFML'de pencereler sf::Window sınıfıyla tanımlanmıştır. Bu sınıf doğrudan pencere oluşturmak için faydalı kurucular sunmaktadır. Örnek bir taneyi aşağıda görebilirsiniz:
sf::Window App(sf::VideoMode(800, 600, 32), "SFML Penceresi Cam Cama");
Burada App isminde bizim yeni penceremizi temsil edecek yeni bir değişken oluşturuyoruz. Parametrelere bakacak olursak:

İlk parametremiz bir sf::VideoMode'dir. Pencere için seçilen video kipini ayarlar. Burada pencere boyutu 800x600 piksel boyutunda ve renk derinliğiyse 32 bit derinliğindedir. Hatırlatmakta fayda var, belirtilen boyut pencerenin dahili alanıdır, başlık çubuğu ve çerçeveler buna dahil değildir.

İkinci parametre std::string biçimindedir ve pencere başlığını tanımlar.

Eğer pencereyi daha sonra oluşturmak ya da değişik parametrelerle yeniden oluşturmak istiyorsanız Create fonksiyonunu kullanabilirsiniz:
App.Create(sf::VideoMode(800, 600, 32), "70'lik fiyatına 60'lık SFML Penceresi");
Kurucu ve Create fonksiyonları iki ek parametre daha alabilir. Birincisi pencere stilinde daha fazla kontrole imkan verir. İkincisiyse daha gelişmiş grafik seçenekleri sunar.

Stil parametresi sf::Style ile verilir, None, Titlebar, Resize, Close ve Fullscreen değerlerini alabilir. Öntanımlı stil Resize | Close'dur.
// Bu tam ekran bir pencere oluşturacak
App.Create(sf::VideoMode(800, 600, 32), "SFML Penceresi", sf::Style::Fullscreen);


Video Kipleri
Yukarıdaki örneklerde video kipini önemsemedik çünkü pencere kipinde çalışıyorduk, bu yüzden her boyut uygundu. Eğer tam ekran kipinde çalışacaksak sf::VideoMode tarafından sunulan arayüz aracılığıyla desteklenen video kiplerini kullanmalıyız.
unsigned int VideoModesCount = sf::VideoMode::GetModesCount();
for (unsigned int i = 0; i < VideoModesCount; ++i)
{
    sf::VideoMode Mode = sf::VideoMode::GetMode(i);
    // Kip geçerli bir video kipi
}
Video kipleri en yüksekten en düşüğe doğru sıralanmıştır, yani sf::VideoMode::GetMode(0) her zaman desteklenen en iyi video kipini döndürür.
// En iyi video kipinde tam ekran bir pencere oluşturuluyor
App.Create(sf::VideoMode::GetMode(0), "SFML Window", sf::Style::Fullscreen);
Eğer video kiplerini yukarıdaki kod arıcılığıyla ayarlarsanız her zaman geçerli sonuçlar elde edersiniz ama bazı durumlarda video kipini başka bir yerden ayarlamanız gerekebilir, bir yapılandırma dosyasından örneğin. Bu gibi durumlarda IsValid() ile video kipin geçerliliğini kontrol edebilirsiniz:
sf::VideoMode Mode = ReadModeFromConfigFile();
if (!Mode.IsValid())
{
    // Hata...
}
Ayrıca o anki masaüstü video kipini de kullanabilirsiniz GetDesktopMode ile:
sf::VideoMode DesktopMode = sf::VideoMode::GetDesktopMode();


Ana Döngü
Bir kere penceremizi oluşturduktan sonra ana döngümüze girebiliriz:
bool Running = true;
while (Running)
{
    App.Display();
}
return EXIT_SUCCESS;
Ana döngüyü sonlandırmak ve sonrasında uygulamayı kapatmak için Running değişkenini false yapmak yeterlidir. Bu genellikle pencere kapatıldığında ya da kullanıcı tarafından ESC gibi özel bir tuşa basıldığında olur. Bu tip olayların nasıl yakalandığını sonraki derslerimizde göreceğiz.

Ana döngü sadece App.Display()'i çağırır. Bu penceremizin içeriğini ekranda göstermek için ihtiyaç duyulan tek çağrıdır. Display'in çağrılması ana döngüde her zaman olur ve penceredeki tüm öğeler güncellendikten ve çizildikten sonra tekrar çağrılır.

Görmüş olduğunuz gibi ana döngüden sonra başka kod yoktur, penceremiz doğru bir şekilde ve otomatik olarak main fonksiyonu bittikten sonra yok edilir (temizleme işini yıkıcı halleder).

EXIT_SUCCESS, sadece 0 döndürür, eğer bir hata döndürmek istiyorsanız -1 döndüren EXIT_FAILURE'yi kullanabilirsiniz.

Sadece boş bir pencere oluşturacak örneğimizle eğitseli bitirelim:



Bu eğitselle ilgili diğer örneklere sfml-gelistirme deposundan ulaşabilirsiniz.


Kaynak: Window - Opening a window