Thursday, 11 March 2010

Kapal Luar Angkasa (3)

Tulisan ini merupakan lanjutan dari:
Kapal Luar Angkasa (1)
Kapal Luar Angkasa (2)

"Font: Courier New, Font Size:12, Font Style: Bold"
Ini semua tentang TTF (True Type Font)


Dengan adanya SDL_ttf, akan mempermudah pembuatan sebuah text/teks. Lihat potongan kode berikut:

TTF_Font *Huruf = NULL;
...
//di fungsi main()
if( TTF_Init() == -1) return 1;

...
Huruf = TTF_OpenFont("Data/impact.ttf",24);
if( Huruf == NULL) return 1;
SDL_Color putih = {255,255,255};

...
std::stringstream hg_score;
SDL_Surface *kalimat = NULL;

//mengubah bilangan bulat (int highscore) menjadi string
hg_score<<"High Score : "<<highscore;
kalimat = TTF_RenderText_Solid( Huruf, hg_score.str().c_str(),putih);
terapinGbr((lebar_layar/2)-(kalimat->w/2),0,kalimat,screen);
SDL_FreeSurface( kalimat);

...
TTF_CloseFont( Huruf);
TTF_Quit();
...
Untuk dapat menggunakannya saat program berjalan kita harus memanggil fungsi utama TTF terlebih dahulu, yaitu "TTF_Init()". Jika fungsi init ini gagal dipanggil (return -1) maka program akan segera ditutup (walaupun bisa dilanjutkan dengan kemungkinan error atau crash setiap saat). Selanjutnya agar dapat menyimpan sebuah file huruf (.ttf) ke dalam sebuah variabel, kita menggunakan "TTF_Font" dan biar lebih dinamis penggunaannya digunakan pointer. Untuk mengisi variabel bertipe TTF_Font dengan sebuah file (.ttf), kita menggunakan fungsi "TTF_OpenFont(const char *file, int ptsize)". Argumen pertama diisi dengan lokasi file yang akan dituju, sedangkan argumen kedua diisi dengan ukuran huruf (font size) yang akan digunakan. Selanjutnya memastikan bahwa file yang dipanggil ada dan berjalan dengan mulus. Tipe data "std::stringstream" mempermudahkan kita dalam memasukkan sebuah bilangan ke dalam sebuah kalimat dengan mengubahnya menjadi sebuah string atau huruf.

"TTF_RenderText_Solid(TTF_Font *font, const char *text, SDL_Color fg)", argumen pertama akan membuat sebuah gambar dengan bentuk dan ukuran dari huruf yang digunakan, argumen kedua diisi dengan kalimat yang akan ditampilkan, dan argumen ketiga sesuai namanya berfungsi untuk memberi warna. Jika semuanya tidak ada masalah maka akan tercipta sebuah teks dari gambar. Selanjutnya menampilkannya dan terakhir membersihkannya (surface) karena sudah tidak digunakan lagi. Jangan coba-coba mengisi dteks lagi dengan TTF_RenderText_Solid(), jika belum membersihkan surface-nya karena dapat menyebabkan memory leak, yang pada akhirnya komputer dapat nge-hang . Mau coba? Hapus baris SDL_FreeSurface, lalu jalankan program lalu lihat PF Usage (Page File) di Task Manager (Windows XP) maka dipastikan angkanya akan terus bertambah walau nggak banyak setiap detiknya. Kurang terasa? Ingin mencoba sampai grafik kuningnya ada diatas? Silahkan gunakan pengulangan untuk baris TTF_Render.

Gambar 1. Page File di Task Manager


Jika sudah sampai puncak, kerja processor terlihat tidak terlalu sibuk tapi rasa "Nge-Lag" dan lampu led HDD terlihat sangat sibuk. Ternyata membuat program yang bermanfaat tidak semudah yang dibayangkan dibandingkan program yang berbahaya - "Google say: Don't be Evil". Terakhir jika font / huruf sudah tidak digunakan lagi maka kita perlu membersihkannya dengan "TTF_CloseFont( TTF_Font*)". TTF_Quit(), waktunya untuk pulang dan bersih-bersih.

Aku hanya ingin berterima kasih kepada Lazy Foo,
- krofz

No comments:

Post a Comment

Maaf jika komentar anda lama terbitnya ^__^, penulis berusaha OL sesering mungkin. Komentar anda adalah semangat blog ini, dan juga semangat para blogger lainnya. You can use XHTML tags: <a href="" rel="link"> </a>, <strong> </strong>, <b> </b>, <em> </em>, <i> </i>.

Spesial character use :
&lt; for <
&gt; for >


Use Pastebin.com for alternative to display your code :) .

 

back to top

back to top