Thursday, 14 January 2010

SDL : Deteksi Tabrakan (2)

Tulisan ini merupakan lanjutan dari:

Gambar 1. Kotak Yang Sibuk!

Sebelumnya lupa dikasih screenshot program, yah udah tuh diatas screenshotnya hehehe... Oke dilanjutin, bagian terpenting ada di fungsi "void f_PeriksaTabrakan(SDL_Rect A, SDL_Rect B){}" yang akan memeriksa dua kotak, yah fungsinya sesuai namanyalah. Bagaimana fungsi ini melakukannya? Jawabannya ada didalam fungsi tersebut (ya iyalah). Pertama yang dilakukan membuat nilai-nilai yang akan dibandingkan:

int kiriA, kiriB;
int kananA, kananB;
int atasA, atasB;
int bawahA, bawahB;

kiriA = A.x;
kananA = A.x + A.w;
atasA = A.y;
bawahA = A.y + A.h;

kiriB = B.x;
kananB = B.x + B.w;
atasB = B.y;
bawahB = B.y + B.h;
Selanjutnya dengan kata kunci (keyword) if memeriksa nilai-nilai tersebut, kalau salah satu dari keempat bentuk if tersebut ada yang bernilai true dapat dipastikan tidak terjadi tabrakan:

if (bawahA <= atasB) return false;
if (atasA >= bawahB) return false;
if (kananA <=kiriB) return false;
if (kiriA >=kananB) return false;
Masih bingung kenapa bisa begitu? Oke kalau digambarkan akan seperti berikut keempat bentuk if-nya:

Gambar 2. If pertama

Jika titik terbawah dari kotak A (bawahA didapat dari titik y A ditambah tinggi kotak A) lebih kecil dari titik teratas dari kotak B (atasB didapat dari titik y B) maka dapat dipastikan tidak akan terjadi tabrakan biarpun si A atau si B ukurannya mau segede gajah (Gambar Kiri). Disini baru diperiksa sumbu y-nya antara kedua kotak, tapi jika false (nilainya bawahA lebih besar dari atasB) maka kemungkinan terjadi tabrakan masih ada (Gambar kanan). Wah komputer mesti mikir lagi nih buat meriksa nilai-nilai selanjutnya , seperti berikut:

Gambar 3. If kedua

Masih berada di sumbu y, pada gambar kiri bernilai false (tidak terjadi tabrakan). Pemeriksaan ini masih belum menemukan titik terang kalau nilai atasA lebih besar dari bawahB (Gambar kanan). Selanjutnya kita kesumbu x:
Gambar 4. If ketiga dan If keempat

Sudah selesai dengan sumbu y, sekarang kita ke sumbu x. Dengan menggunakan sudut-sudut kotak sebagai pembanding kita dapat menciptakan sebuah deteksi tabrakan yang sederhana. Jika melihat gambar-gambar diatas membingungkan hahaha , coba lihat gambar berikut:

Gambar 5. Tabrakan!

Semua hasil pengecekan nilai (keempat if) dapat dipastikan tidak ada yang sesuai, yang ujung-ujungnya fungsi tersebut bernilai true. Semoga sudah mengerti, gampang kok hehehe..

- 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