Çarşamba, Nisan 14, 2010

SDL ile Ekrana Yazı Yazdırma

  1. SDL ekrana yazı yazdırmak(basmak) için harici bir kütüphane kullanılıyor. Bunun adı da "SDL_ttf" kütüphanesi. İndirmek için bu adresi kullanabilirsiniz.
  2. Kullandığınız işletim sistemine göre indireceğiniz dosya farklı. Windows üzerinden anlatımı yapacağım için adres deki binary bölümünden "SDL_ttf-devel-2.0.9-VC8.zip" dosyasını indirdim.
  3. Klasörü zipten kurtardıktan sonra include dizinindeki "SDL_ttf.h" dosyasına SDL yi kurduğumuz ana dizindeki(bende C:\SDL) include klasörüne kopyalıyoruz. Aynı şekilde lib klasöründeki "SDL_ttf.lib" dosyasını ana dizindeki lib klasörüne atıyoruz .dll dosyalarını da ya oluşturduğumuz her proje klasöründe bulunduracağız yada windowsun system32 klasörüne kopyalayabiliriz.
  4. Şimdi sıra IDE ayarlarını yapmaya geldi. Ben her zamanki gibi Code::Blocks'a göre anlatacağım. Diğer IDE ler için yaklaşık olarak işlemleri aynıdır. Code::Blocks dan Compiler and debugger bölüme giriyoruz. Gelen pencereden Linker Settings sekmesine tıklıyoruz. Daha sonra Link Libraries bölümüne SDL nin ana dizindeki(bende C:\SDL) lib klasöründe bulunan "SDL_ttf.lib" dosyasını ekliyoruz.
Kurulum bitti sıra artık ortamımız kodumuzu yazmaya uygun hale geldi. Açıklamaları ile örnek uygulama aşağıda.

#include <SDL.h>
#include <SDL_ttf.h>

int main(int argc, char* args[])
{
if(SDL_Init(SDL_INIT_EVERYTHING)==-1)
return 1;

SDL_Surface* screen = SDL_SetVideoMode( 640, 480, 32, SDL_SWSURFACE );

if(!screen)
return 1;

//SDL_ttf dosyasını projemizde kullanabilir hale getiriyoruz
if(TTF_Init()==-1)
return 1;

/*Kullanacağımız font tipini ve yazı puntosunu belirledik.
Ben windows dizinindeki Fonts klasöründen Comic Sans MS tipinin
ttf dosyasını proje dizinime kopyaladım. Yazı büyüklüğünüde 30 punto yaptım*/
TTF_Font* font = TTF_OpenFont("comic.ttf",30);

if(!font)
return 1;

//Yazı rengini belirledim(kırmızı)
SDL_Color yaziRengi = {255,0,0};


/*/SDL de ekrana yazı yazdırmak demek ekrana resim basmak demektir.
Bu yüzden gireceğim yazıyı resim olarak renderledikten sonra
resmi tutması için surface tanımladım.*/
SDL_Surface* metin;

//Yazıyı renderleme işlemini gerçekleştirdim. Ve yazı artık resim haline geldi
metin=TTF_RenderText_Solid(font,"Merhaba Dunya",yaziRengi);

if(!metin)
return 1;

//Yazının ekrana basılacağı koordinatlar
//Ekranın ortası
SDL_Rect yaziKoord;
yaziKoord.x=(screen->w/2)-(metin->w/2);
yaziKoord.y=(screen->h/2)-(metin->h/2);

//Yazıyı yani resmi ekran bastım
SDL_BlitSurface(metin,0,screen,&yaziKoord);
SDL_Flip(screen);

bool dongu=true;
while(dongu)
{
SDL_Event event;
while (SDL_PollEvent(&event))
{
switch (event.type)
{
case SDL_QUIT:
dongu = false;
break;

case SDL_KEYDOWN:
{
if (event.key.keysym.sym == SDLK_ESCAPE)
dongu = false;
}
}
}
}

//fontu kapattım ve çıkış yaptım kaynakları geri iade ettim
TTF_CloseFont(font);
TTF_Quit();

SDL_FreeSurface(metin);
SDL_Quit();
return 0;
}

Kaynak kodu buradan indirebilirsiniz.Kolay gelsin

Hiç yorum yok: