Thursday, 4 March 2010

Kapal Luar Angkasa (2)

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

Proses Penggambaran


Ok, saatnya kita mempelajari fungsi-fungsi utama penggambaran. Berikut kode-nya:
...
void terapinGbr(int x, int y, SDL_Surface *sumber, SDL_Surface *tujuan,
SDL_Rect *clip = NULL)
{
SDL_Rect kotak;

kotak.x = x;
kotak.y = y;

SDL_BlitSurface( sumber, clip, tujuan, &kotak);
}

...
SDL_Surface *memuat(std::string namafile, int r, int g, int b)
{
SDL_Surface *gbrDimuat = NULL;
SDL_Surface *gbrOptimal = NULL;

gbrDimuat = IMG_Load( namafile.c_str());
if( gbrDimuat != NULL)
{
gbrOptimal = SDL_DisplayFormat( gbrDimuat);
SDL_FreeSurface( gbrDimuat);

if( gbrOptimal != NULL)
{
SDL_SetColorKey( gbrOptimal, SDL_SRCCOLORKEY,
SDL_MapRGB( gbrOptimal->format, r,g,b));
}
}
return gbrOptimal;
}
...
Fungsi yang pertama yaitu "void terapinGbr()", berfungsi untuk memudahkan kita dalama menampilkan sebuah gambar dilayar. Cukup dengan mengisi parameter, seperti contoh kode berikut :
...
void kapal::tampil()
{
//misal kotak.x = 100, dan y = 100
terapinGbr(kotak.x-10, kotak.y-10, gbrKapal, screen);
}
...


Maka akan tercipta sebuah gambar di layar (screen) dengan posisi x = 90 (misalnya jika kotak.x = 100), dan y = 90 (misalnya juga jika kotak.y = 100), dengan gambar yang ditampilkan adalah variabel gbrKapal (SDL_Surface *), dan permukaan (surface) yang dituju adalah variabel screen. Sedangkan untuk parameter yang kelima tidak dimasukkan juga tidak apa-apa, karena jika tidak diisi maka nilai defaultnya adalah NULL (SDL_Rect *clip = NULL). Parameter kelima ini berguna untuk melakukan proses animasi, karena game ini masih sangat sederhana (suara aja nggak ada) jadi belum saatnya digunakan hehehe... ntar tunggu Kapal Luar Angkasa v0.2 . Sudah pahamkan dengan fungsi terapinGbr()? Kalau sudah sekarang kita kefungsi yang kedua yaitu "SDL_Surface *memuat()". Fungsi kedua ini berguna saat kita hendak memasukkan sebuah file (gambar) menjadi variabel (SDL_Surface*) yang dapat ditampilkan/diolah. Berikut contoh kode-nya:

...
gbrPeluru = memuat("Data/Peluru.png",255,0,0);
gbrPower = memuat("Data/Kekuatan.png",0,0,100);
...
Parameter yang pertama akan menampung sebuah string untuk menuju ke file yang dituju. Sedangkan yang kedua, ketiga, dan keempat berfungsi untuk menghilangkan warna yang tidak diingin dengan kode warna RGB. Dari contoh diatas gbrPeluru akan memanggil file Peluru.png di direktori/folder Data, dan akan menghilangkan warna Merah (R=255,G=0,B=0). Tapi sebelum melanjutkan program dan menampilkan gbrPeluru (misalnya) perlu diperiksa apakah file ada ditempat atau sudah kelayapan (alias nggak ada). Dengan memeriksanya menggunakan "if(gbrPeluru == NULL)", kok bisa kalau gambarnya nggak ada pasti variabelnya NULL? Ini karena kita sudah membuat fungsi kedua ini powerfull (alias canggih). Mari kita lihat isi dari fungsi kedua ini, pertama adalah membuat 2 variabel SDL_Surface berpointer lalu mengisinya dengan NULL. Berbeda dengan tutorial sebelumnya yang menggunakan "SDL_LoadBMP()", yang hanya dapat memanggilkan file berformat Bitmap (.bmp), kali ini kita menggunakan "IMG_Load()" yang berasal dari "SDL_image.h" dan lib "SDL_image.lib", yang tentunya sudah kita download sebelumnya. IMG_Load ini dapat memanggil lebih banyak format gambar seperti .jpg, .png, .tiff, dsb. Ok, kita lanjutin kalau file yang dituju ada ditempat, maka proses berlanjut ke bagian dari if. Tapi kalau nggak ada maka nilai kembaliannya (return) receh, wew... salah return-nya variabel gbrOptimal yang masih beralamat NULL.

"SDL_DisplayFormat()" akan mengubah format "bit per pixel" (bpp) pada gambar sehingga disesuaikan dengan kemampuan program yaitu sebesar 32 (lihat pada parameter ketiga SDL_SetVideoMode( lebar_layar, tinggi_layar, 32, SDL_SWSURFACE)). Selanjutnya membersihkan alamat dan nilai dari SDL_gbrDimuat dengan SDL_FreeSurface(). Agar gambar tidak ditampilkan begitu saja (yang nanti terlihat seperti kotak bergambar), maka kita perlu membuang warna tertentu yang telah dijadikan sebagai background. Hal ini dapat dilakukan dengan "SDL_SetColorKey()", hmm.. nggak bisa banyak jelasin fungsi ini . Ada yang berminat mengembangkan game ini? .

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