Wednesday, 4 November 2009

SDL : Petualangan Pertama (2)

Jelajahi Dengan Petamu!

Tulisan ini merupakan lanjutan dari:

SDL : Petualangan Pertama (1)

...
// centre the bitmap on screen
SDL_Rect dstrect;
dstrect.x = (screen->w - bmp->w) / 2;
dstrect.y = (screen->h - bmp->h) / 2;
...
Kode diatas akan menempatkan gambar bitmap tepat ditengah-tengah dengan perhitungan secara matematis. "SDL_Rect" berfungsi untuk membuat sebuah objek berupa kotak/bujur sangkar (Rect - Rectangle) yang memiliki anggota (member) yaitu variabel x untuk koordinat x, y untuk koordinat y, w untuk width (lebar), dan h untuk height (tinggi). Karena yang akan kita buat adalah program 2D maka sumbu yang digunakan hanya x dan y (ya iyalah 2 dimensi). Yang perlu diperhatikan dalam program SDL adalah bahwa nilai koordinat y semakin keatas semakin minus (-) sedangkan umumnya adalah plus (+).

Gambar 1. (A) Nilai koordinat pada umumnya, (B) nilai koordinat pada SDL. (sumber : My SDL Teacher)

Nilai koordinat x (dstrect) didapat dari lebar layar (screen->w) dikurang lebar gambar lalu dibagi 2. Begitu juga dengan koordinat y didapat dari pengurangan tinggi layar dengan tinggi gambar. Cara atau perhitungan ini membuat penempatan gambar lebih efisien dibanding memasukkan nilai x dan y secara manual. Untuk membuktikannya ubah gambar cb.bmp dengan ukuran pixel (lebar dan tinggi) yang berbeda.

"Tanda panah kekanan (->) itu untuk apaan yah?", tanda ini digunakan untuk memanggil anggota (member) dari suatu variabel berpointer yang memiliki tipe data bentukan seperti struct, class, dll. Contoh:
...
struct orang
{
int umur;
};

orang Budi;
orang* Rudi;

Budi.umur = 10;
Rudi = &Budi;

cout<<"Umur Budi = "<<Budi.umur<<endl;
cout<<"Umur Rudi = "<<Rudi->umur<<endl;
...
Karena Rudi bertipe pointer dan menunjuk ke alamat Budi sehingga umur Rudi didapat dari umur Budi. Tetapi untuk pemanggilan anggotanya, Rudi harus menggunakan tanda panah -> dan Budi menggunakan titik. Bayangkan jika kedua variabel tersebut menggunakan titik, kita tidak tau yang mana yang berpointer dan yang tidak, simple kan ;D.
...
// program main loop
bool done = false;
while (!done)
{
// message processing loop
SDL_Event event;
while (SDL_PollEvent(&event))
{
// check for messages
switch (event.type)
{
// exit if the window is closed
case SDL_QUIT: done = true; break;

// check for keypresses
case SDL_KEYDOWN:
{
// exit if ESCAPE is pressed
if (event.key.keysym.sym == SDLK_ESCAPE)
done = true;
break;
}
} // end switch
} // end of message processing
...
Di bagian ini program mulai berjalan terus menerus tanpa henti (yah nge-hang dong?!, nggak ntar bisa ditutup). Karena kita tidak tau kapan program akan dihentikan makan pengulangan yang cocok adalah while, selama done sama dengan false - (!done) atau (done == false). SDL_Event berfungsi untuk menangani suatu kejadian, kejadian disini adalah ketika user memberikan input seperti menekan tombol close (lambang X dipojok kanan window), keyboard, mouse, dll. Selanjutnya kita memasuki fungsi SDL_PollEvent() yang argumennya kita isi dengan alamat variabel event, untuk format awal fungsi SDL_PollEvent():
...
/* Polls for currently pending events, and returns 1 if there are any pending
events, or 0 if there are none available. If 'event' is not NULL, the next
event is removed from the queue and stored in that area.
*/
extern DECLSPEC int SDLCALL SDL_PollEvent(SDL_Event *event);
...
Fungsi ini akan terus terjadi selama (while) masih ada pemberian (poll) input. Ketika suatu event terjadi maka event itu akan ditaruh didalam suatu antrian (queue) event, antrian ini menyimpan data event untuk setiap event yang terjadi. Selanjutnya pengecekan tipe dari event menggunakan switch, SDL_QUIT berasal dari penekanan tombol X dipojok kanan window. SDL_KEYDOWN untuk penekanan keyboard. Selain kedua tipe tadi ada juga SDL_MOUSEMOTION untuk pergerakan mouse, SDL_MOUSEBUTTONDOWN untuk penekanan tombol mouse. event.key.keysym.sym untuk setiap pengecekan tombol keyboard kita memanggil struktur dengan nama "key" yang memiliki struktur lagi yaitu "keysym", dan struktur terakhir "sym" (panjang yah?!...) dan yang menampung data event (keyboard) adalah "sym". SDL Key (SDLK_..) lainnya:
SDLK_0 - SDLK_9
SDLK_a - SDLK_z
SDLK_F1 - SDLK_F15
//dan beberapa karakter lainnya
SDLK_UP, SDLK_DOWN, SDLK_LEFT, SDLK_RIGHT
SDLK_DOLLAR
//dan sebagainya
Sedikit kode lagi akan kita bedah.... tapi pembedahan ini menguras banyak tenaga dan pikiran hehehe... rileks-kan tubuh dan pikiranmu dengan bermain game favoritmu. So,.. Masih bersambung... ;)

- 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