Collission Detection dengan Function POINT

BY IN QBasic Comments Off on Collission Detection dengan Function POINT

Di dalam game arcade, unsur ini sangat diperlukan, yaitu untuk mendeteksi tubrukan antar sprite karena tubrukan antar sprite yang satu dengan lainnya akan menghasilkan result yang berbeda. Misalnya, kalau dalam game arcade pesawat tembak2an, tubrukan antar pesawat menghasilkan ledakan dan nyawa kita dikurangi satu, lalu tubrukan dengan sprite power, bisa menambah kuat pesawat kita atau mengupgrade senjata kita.
Dalam QBasic, ada sebuah function yang bernama function POINT. Function ini dapat mendeteksi warna tertentu pada lokasi tertentu. Jadi dalam program, kita akan mencari titik tengah dari sprite, lalu dari posisi tengah tersebut akan kita bandingkan sebanyak beberapa pixel untuk warna pada posisi yang baru. Kalau menurut saya, metode ini cukup akurat untuk bentuk background yang tidak beraturan. Kebanyakan game2 RPG yang ditulis pakai bahasa Basic, menggunakan sistem tile map untuk backgroundnya. Sistem ini memang dipercayai sebagai metode yang paling baik (dalam dunia QBasic tentunya) Sedangkan dengan menggunakan function POINT, kita hanya dapat menggunakan warna yang sama untuk sprite kita bisa berjalan. Jika dia menjumpai warna yang tidak sama, maka tubrukan dianggap telah terjadi. Sounds easy, kan?
Jadi penggalan programnya kira2 seperti ini…

DO WHILE NOT Salah
x.center = x.pos + 10
y.center = y.pos + 10
coll = 0
a$ = INKEY$
IF a$ = CHR$(27) THEN GOTO ending
IF a$ = “” THEN n = 0
IF LEN(a$) = 2 THEN n = ASC(MID$(a$, 2, 1)) ELSE n = 0
IF n = 72 THEN
IF POINT(x.center, y.center – 10) > 0 THEN coll = 1 ‘ke atas
GOSUB atas
END IF
IF n = 75 THEN
IF POINT(x.center – 10, y.center) > 0 THEN coll = 1 ‘ke kiri
GOSUB kiri
END IF
IF n = 77 THEN
IF POINT(x.center + 10, y.center) > 0 THEN coll = 1 ‘ke kanan
GOSUB kanan
END IF
IF n = 80 THEN
IF POINT(x.center, y.center + 10) > 0 THEN coll = 1 ‘ke bawah
GOSUB bawah
END IF

variabel coll adalah variabel flag yang akan memberikan nilai 0 jika tidak ada collission dan memberikan nilai 1 kalau terjadi tubrukan. x.center dan y.center masing2 adalah variabel yang memberikan nilai titik tengah dari sprite. kenapa harus titik tengahnya? supaya kita tidak bingung menghitung selisih jarak antara sprite dengan object lain yang ada di hadapannya…




Comments are closed.