Tweet

SDL ve font tipleri

Bu bölümde sdl de farklı karakter formatlarının kullanılması konusuna değineceğiz.
Oluşturulan ekranlarda oluşturulan textlerde kullanmak istediğiniz karakter formatlarını (ttf uzantılı) SDL de üçüncü parti bir kütüphane ile
yükleyebilirsiniz.Bunun için önceki bölümlerde yaptığımız gibi SDL in sitesinden sdl_ttf.lib indirilmelidir ve kullanılacağı projenin lib referansına
yani linker da "sdl_ttf.lib" olarak eklenmelidir.[...]

Aşağıdaki örnekte görülen TTF_Font yapısı kullanılacak olan font bilgisini tutmak için kullanılacak,SDL_Color bilgiside oluşturulan text in rengini oluşturmak
için kullanılacaktır.Kodun büyük kısmı aynıdır.Farklı olan kısımlar comment lerle açıklanmıştır.

#include <SDL.h>
#include <SDL_image.h>
#include <SDL_ttf.h> //Yeni eklenen header ımız.
#include <string>

using namespace std;

typedef SDL_Surface * surface;

surface screen;
surface message;
surface background;

SDL_Event evet;
TTF_Font * font = NULL;

//Kullanılacak renk bilgisi yaratıldı.
//SDL_Color color = {0,0xFF,0xFF}; şeklinde de (16 tabanında) oluşturabilirsiniz.

SDL_Color color = {0,255,255};

#define width 640
#define height 480
#define bpp 32

void apply_surface( int x, int y, SDL_Surface* source, SDL_Surface* destination, SDL_Rect* clip = NULL )
{
SDL_Rect offset;

offset.x = x;
offset.y = y;

SDL_BlitSurface( source, clip, destination, &offset );
}

surface loadimage(string filename)
{
surface first = NULL;
surface second = NULL;

first = IMG_Load(filename.c_str());

if(first != NULL)
{
second = SDL_DisplayFormat(first);

SDL_FreeSurface(first);

if(second != NULL)
{
SDL_SetColorKey(second,SDL_SRCCOLORKEY,SDL_MapRGB(second->format,0,0,0));
}
}

return second;
}

bool init()
{
if(SDL_Init(SDL_INIT_EVERYTHING) == -1)
return false;

screen = SDL_SetVideoMode(width,height,bpp,SDL_SWSURFACE);

if(screen == NULL)
return false;

//TTF bilgisinin önceden yüklenmesi gerekir.Biz burda SDL bilgilerini yüklediğimiz fonksiyonumuzda onuda yükledik.

if(TTF_Init() == -1)
return false;

return true;
}

bool load_files()
{
background = loadimage( "background.png" );

//Burda kullanılacak font dosyası projeye ekleniyor.
//lazy.ttf bir ttf font dosyasıdır.Proje klasörünün içinde yer almaktadır.Yani bir dosya açar gibi bu font dosyasını açmaktasınız.
//Not:Font dosyası neredeyse onun pathiyle birlikte ekleyin.

font = TTF_OpenFont( "lazy.ttf", 28 );

if( background == NULL )
{
return false;
}

if( font == NULL )
{
return false;
}

return true;
}

void clean_up()
{
SDL_FreeSurface( background );
SDL_FreeSurface( message );

//Projeden çıkarken ttf fontunun kapatılması gerekir.Bir dosyanın kapatılması gerektiği gibi.
//Ve quit ile bırakırsınız.

TTF_CloseFont(font);
TTF_Quit();

SDL_Quit();
}

int main(int argc, char *argv[])
{
if(init() == false)
return 1;

if( load_files() == false )
{
return 1;
}

bool quit = false;

//burda ekrana yazılacak olan surface-yüzey oluşturulmakta.
//TTF_RenderText_Solid fonksiyonu kullanarak font-text-color üçlüsü ile ekrandaki yüzey oluşturulur.
//TTF_RenderText_Solid dışında fonksiyonlarıda kullanabilirsiniz.

message = TTF_RenderText_Solid(font,"hello world...",color);

if( message == NULL )
{
return 1;
}

//Önce arka plan yaratılır.Sonra bu ekran üzerinde message oluşturulur.
//Etiket üzerine etiket yapıştırmak gibi :)

apply_surface( 0, 0, background, screen );
apply_surface( 0, 200, message, screen );

//Görüntüyü tazeleyin.
if( SDL_Flip( screen ) == -1 )
{
return 1;
}

while( quit == false )
{
while( SDL_PollEvent( &evet ) )
{
if( evet.type == SDL_QUIT )
{
quit = true;
}
}
}

clean_up();

return 0;
}



hgedek
hgedek@gmail.com
30 Agustos 2007 20:22

İlgili Olabilecek Makaleler


Yorumlar (0)




Ziyaretçi olarak yorum yazamazsınız. Üye olmak için tıklayın Üye iseniz giriş yapın.



MENÜ » FORUM
Menü » Takip et
RSS Facebook Twitter Friendfeed
Sık Kullanılanlar Google Yahoo Live
Menü » Paylaş
E-Posta ile gönder Twitter Facebook Friendfeed
Buzz Stumbleupon Delicious Digg