Thursday, 22 October 2009

SDL : Petualangan Pertama (1)



Don't Forget Your Healing Potion!


Kali ini kita akan membedah kode-kode C++ dan SDL yang telah kita buat melalui template Code::Blocks seperti pada tulisan sebelumnya.


...
int main ( int argc, char** argv )
{
// initialize SDL video
if ( SDL_Init( SDL_INIT_VIDEO ) < 0 )
{
printf( "Unable to init SDL: %s\n", SDL_GetError() );
return 1;
}
...

Jika kita akan membuat program dengan SDL pastikan bahwa pada fungsi utama (int main()) memiliki argumen seperti diatas. Jika tidak maka program tidak akan berjalan. Selanjutnya adalah memulai memanfaatkan SDL dengan "SDL_Init(Uint32 flags)" dengan nilai "SDL_INIT_VIDEO" pada "Uint32". Ini berarti kita hanya menggunakan subsistem SDL yaitu video. Subsistem lainnya seperti audio, waktu dan lainnya belum kita berikan, untuk itu sebaiknya diganti dengan "SDL_INIT_EVERYTHING". Tenang aja untuk performance-nya tidak akan berubah drastis jika kita gunakan seluruh (Everything) subsitem. Jika SDL_Init tidak dapat melakukan inisiliasi maka nilai kembaliannya akan lebih kecil dari 0 sehingga jika program dijalankan di command prompt akan terdapat baris output berupa pesan error. Pesan error tergantung dari permasalahan yang didapat oleh SDL_GetError(). Selanjutnya program akan ditutup dengan nilai 1 (pertanda bahwa program ada masalah). Berikut ini subsistem yang dapat digunakan:


SDL_INIT_TIMER
SDL_INIT_AUDIO
SDL_INIT_VIDEO
SDL_INIT_CDROM
SDL_INIT_JOYSTICK
SDL_INIT_NOPARACHUTE
SDL_INIT_EVENTTHREAD
SDL_INIT_EVERYTHING

Selanjutnya adalah:


...
// make sure SDL cleans up before exit
atexit(SDL_Quit);
...

Dari baris komentar-nya saja mungkin kita sudah tau fungsi baris ini. Setelah kita meng-inisialisasi SDL saat awal program dimulai maka setelah program ditutup, kita harus menutup terlebih dahulu SDL agar terjadi proses bersih-bersih. Dapat juga menggunakan "SDL_Quit();" sebelum kode "return 0;" pada akhir fungsi main (akhir kode).


...
// create a new window
SDL_Surface* screen = SDL_SetVideoMode(640, 480, 16,
SDL_HWSURFACE|SDL_DOUBLEBUF);
if ( !screen )
{
printf("Unable to set 640x480 video: %s\n", SDL_GetError());
return 1;
}
...

Kita membuat variabel ber-pointer dengan nama screen dan tipe data SDL_Surface. SDL_Surface ini menampung data berupa gambar, yang tentunya sebelum dimasukkan ke variabel bertipe surface (permukaan - SDL_Surface) harus diproses terlebih dahulu. SDL_SetVideoMode akan membuat sebuah jendela layaknya aplikasi lainnya sehingga dapat menampilkan gambar ke pengguna. Argumen pertama berisi tentang lebar jendela aplikasi kita berjumlah 640 pixel, yang kedua berisi tinggi aplikasi berjumlah 480 pixel, yang ketiga berisi jumlah bit yang terdapat pada pixel (bit per pixel) berjumlah 16 bit. Sedangkan yang keempat akan membuat permukaan layar (jendela) pada sistem memory tanda (flag) lainnya untuk mengisi argumen keempat adalah SDL_SWSURFACE. Selanjutnya akan memeriksa apakah screen bernilai false, karena screen bertipe pointer maka nilai falsenya adalah NULL, kalau pada int(eger) nilai falsenya adalah 0. Sehingga kode sebelumnya dapat dirubah menjadi seperti berikut:


...
//menge-set pointer screen ke NULL
//sangat tepat digunakan jika pointer tidak menunjuk kemanapun
SDL_Surface* screen = NULL;

screen = SDL_SetVideoMode(640, 480, 16, SDL_SWSURFACE);

if ( screen == NULL )
{
...

Jika ingin melihat fungsi SDL_SetVideoMode() dan beberapa flag untuk argumen keempat (Uint32 flag), silahkan buka file header video "(video.h)". Ok kode selanjutnya :


...
// load an image
SDL_Surface* bmp = SDL_LoadBMP("cb.bmp");

// sama dengan fungsi "if ( bmp == NULL)"
if (!bmp)
{
printf("Unable to load bitmap: %s\n", SDL_GetError());
return 1;
}
...

Membuat variabel untuk menampung gambar dalam hal ini adalah gambar bitmap dengan menggunakan fungsi SDL_LoadBMP (BitMaP), dan nama file yang dituju adalah cb.bmp. File yang dituju harus satu folder dengan file aplikasi (.exe) yang akan dijalankan. Umumnya file pendukung program seperti gambar, suara, huruf, dll, diletakkan pada folder masing-masing sehingga terlihat lebih rapi. Nah agar program menunjuk kesuatu folder misalnya folder gambar, kodenya dapat dirubah menjadi "SDL_LoadBMP("Gambar/cb.bmp");".

Bersambung... ;)

- krofz

Thursday, 8 October 2009

Setting SDL di Code::Blocks v8.02 (2)


Ini Adalah Sebuah Awal..

Tulisan ini merupakan lanjutan dari:
Setting SDL di Code::Blocks v8.02 (1)

Sudah OK semuanya? selanjutnya men-setting SDL pada IDE, untungnya di Code::Blocks cuma klik sana klik sini doang. Jalankan Code::Blocks, lalu pilih menu "File-> New-> Project...", lalu pilih kategori "SDL Project", lalu pilih "Go":

Gambar 1. Membuat SDL project

Next, jika muncul gambar seperti berikut:

Gambar 2. Lokasi project

Masukkan alamat folder yang akan ditempati proyek (project) lalu masukkan nama proyek-nya, isi sesuai gambar juga nggak masalah (asal drive "D:\" ada). Selanjutnya klik next, sampai muncul gambar berikut:

Gambar 3. Memilih lokasi SDL

Jika setelah next nggak muncul seperti gambar diatas pilih cancel, biasa-nya kalau pertama kali setting SDL di Code::Blocks (v8.02) gambarnya bukan kaya diatas (niatnya mau diambil screenshot-nya, eh udah instal ulang programnya masih nggak muncul juga gambarnya XD ). Udah muncul gambarnya, seperti diatas? Kalau sudah pilih button/tombol browse (yang gambarnya titik-titik tiga) jika belum memilih lokasi SDL. Selanjutnya memilih output dari SDL, ada 2 jenis output yaitu "Debug", dan "Release". Bisa keduanya kita centang sesuai atau salah satu, seperti gambar berikut:

Gambar 4. Pilihan output program SDL

Perbedaan release dengan debug .... eh... eh.... *Mikir dulu, lama.. banget*
Pada release ukurannya lebih kecil dari debug karena tidak disematkan/dimasukkan intruksi-intruksi untuk proses debug (pencarian kesalahan program atau bug) kali *siul siul*.
Selanjutnya pilih finish, dan isi dari project (pada panel "Management" bagian kiri) yang kita buat adalah sebagai berikut:

Gambar 5. Isi project SDL

  1. "main.cpp", berisi kode-kode bahasa C++ yang berasal dari template project SDL-nya Code::Blocks. Nanti kita akan bahas setiap kode-nya ( kalau sempet yah ;D ).

  2. "cb.bmp", merupakan gambar dengan format .bmp (Bitmap) yang akan ditampilkan oleh program GUI kita.
Kalau sudah di-finish pilih "Build -> Build and run (F9)". Kalau kita sudah mensetting file .dll (SDL). maka program dapat langsung berjalan dan hasil akhirnya adalah sebagai berikut dengan lebar window (jendela program) sebesar 640 pixel dan tinggi sebesar 480 pixel:

Gambar 6. Program SDL pertama kita!

Tapi jika file .dll-nya belum disetting atau diatur sistem akan menampilkan pesan kesalahan seperti pada gambar dibawah ini:

Gambar 7. Dimana SDl.dll-nya?


Sekarang tau kan fungsi file .dll :D . Sampai disini kita baru mengatur agar file SDL yang kita download dapat digunakan oleh compiler/IDE dan menggunakan template program SDL sebagai awal pembuatan program SDL kita. Selanjutnya kita akan bedah satu persatu setiap kodenya hehehe...

- krofz

Thursday, 1 October 2009

Setting SDL di Code::Blocks v8.02 (1)


Move... Move..!!

IDE yang aku gunakan adalah Code::Blocks mungkin akan berbeda cara mensetting-nya dengan IDE yang lain (contoh: MS Visual C++, Dev-C++, dll) tapi intinya mungkin sama. Sudah donwload file SDL-nya? coba ikuti tutorial di link ini. Yang akan di download pada tutorial tersebut adalah "SDL Main", yang artinya hanya bagian-bagian terpenting dalam aplikasi SDL saja, tapi cukup untuk membuat sebuah aplikasi (game) yang menarik dan fast (dalam kinerja-nya).

OK, sekarang kita akan men-setting SDL di Code::Blocks (v8.02). Jika meng-instal Code::Blocks seperti biasa dengan meng-klik "Next, Next, Next" aja maka secara default path atau lokasi program ada di "C:\Program Files\CodeBlocks", tapi kalau pada saat instalasi memilih meletakkan dilokasi tertentu silahkan cari folder program tersebut. Sudah ketemu? lalu buka folder tersebut sehingga terlihat seperti gambar berikut:

Gambar 1. Lokasi program Code::Blocks

Buat folder baru dengan nama "SDL" lalu copy-paste folder "include", dan "lib" dari library SDL yang sudah didownload kedalam folder SDL tersebut. Sehingga hasilnya seperti gambar berikut:

Gambar 2. Subfolder didalam folder SDL

Selanjutnya untuk folder bin yang berisi file .dll (Dynamic Link Library), digunakan untuk untuk menjalankan rutin-rutin atau fungsi-fungsi yang bersifat general (umum). Aplikasi SDL akan mencari file tersebut dalam direktori atau didalam sistem. Tanpa file .dll ini program SDL tidak dapat berjalan. Kalau nggak tau file dengan format .dll itu seperti apa, berikut screenshot-nya:

Gambar 3. Dynamic Link Library (.dll)

Penempatannya (file .dll) dalam program SDL terdapat beberapa cara, yaitu:
  1. Meletakkan file .dll satu folder dengan file program (.exe) SDL yang sudah jadi.

  2. Jika menggunakan SO Windows XP dapat meletakkannya di dalam folder "C:\WINDOWS\system32".

Kelebihan cara pertama adalah ketika menjalankan program di komputer lain yang tidak memiliki file .dll (SDL) dalam sistemnya maka program tetap dapat berjalan, sedangkan kekurangannya adalah ukuran size program akan membengkak jika terdapat 2 atau lebih program yang membutuhkan file .dll tersebut dan 2 atau lebih program tersebut disimpan dalam direktori (folder) yang berbeda satu sama lain. Ini biasanya terjadi pada aplikasi SDL yang proses instalasinya hanya melalui copy-paste atau ekstrak arsip (archive) atau folder program (gampangan copy-paste kan? Setuju..!). Paling bengkaknya cuma 1 MB doang, kan Harddisk sekarang daya tampungnya gede-gede :p.

Tapi tetep ngk suka dengan membengkaknya program walaupun hanya 1 MB atau lebih? buat aja semacam setup instalasi. Bisa menggunakan program ketiga atau buat sendiri dengan C++ (hayo.. jangan nanya caranya sekarang yah ke aku... XD ) yang tujuannya adalah hanya mengkopi file .dll (SDL) ke system ("C:\WINDOWS\System32\") sedangkan 2 atau lebih program aplikasi SDL tersebut akan diletakkan dalam direktori yang telah ditentukan (itu loh kaya instal-instal program seperti biasa kan ada browse-nya). Kelebihan cara kedua yah seperti dijelasin diatas, tidak perlu lagi menyertakan file .dll pada masing-masing folder aplikasi SDL.

Tapi berhubung kita belum membuat sebuah program dengan SDL (yang baru belajar SDL) jadi nggak perlu pusing-pusing dulu (emang memusingkan penjelasan diatas? >.< ). Yang penting sekarang ada folder SDL dengan subfolder "include" dan "lib", seperti pada gambar sebelumnya.

- krofz
 

back to top

back to top