Implementasi Map

advertisement
Implementasi Map
Aditya Wikan M
Peta Grid/Tile – Struktur Data
• Struktur data untuk peta grid/tile terbagi
menjadi struktur data tile dan struktur data
objek
• Struktur data grid/tile harus memuat dua hal,
yaitu posisi relatif tile (menurut koordinat grid
yang disarankan pada slide “game world
representation”), dan posisi eksak tile.
• Struktur data objek minimal memuat posisi
relatif tile yang ditempati objek tersebut
Struktur Data Tile
• Struktur data grid/tile harus memuat dua hal,
yaitu posisi relatif tile (menurut koordinat grid
yang disarankan pada slide “game world
representation”), dan posisi eksak tile.
• Posisi relatif tile digunakan untuk hit-test
antar objek
• Posisi eksak tile (koordinat layar) diperlukan
untuk plotting/penggambaran
Struktur Data Tile
• Posisi relatif tile dapat berupa penomoran,
dapat juga berupa koordinat
Struktur Data Tile
• Posisi eksak tile berupa koordinat kartesian
pada layar, yang diwakili oleh satu titik saja
yang mumpuni untuk menggambarkan sebuah
posisi relatif tile
Struktur Data Tile
• tile[r, c]
struktur data posisi relatif tile dalam
bentuk koordinat dua dimensi
• tile[r, c].x
tile[r,c].y
struktur data posisi eksak tile dalam bentuk
koordinat kartesian layar dua dimensi
Struktur Data Tile
Korelasi dengan struktur data objek:
• objek[a].tile_r = r
objek[a].tile_c = c
struktur data objek memuat posisi relatif tile
dalam bentuk row dan column
Agar dapat digunakan dalam hit-test sederhana:
• if(objek[a].tile_r == objek[b].tile_r &&
objek[a].tile_c == objek[b].tile_c){
//hit
}
Struktur Data Tile
Alternatif hit-test (touching):
• if((objek[a].tile_r==objek[b].tile_r||
objek[a].tile_r==objek[b].tile_r-1||
objek[a].tile_r==objek[b].tile_r+1)&&(objek[a]
.tile_c==objek[b].tile_c||
objek[a].tile_c==objek[b].tile_c-1||
objek[a].tile_c==objek[b].tile_c+1)){
//hit
}
Struktur Data Tile
• Boleh menambahkan atribut tipe tile untuk
jenis game yang membedakan jenis petak
(bukan jenis objek yang terletak di atasnya)
• tile[r, c].tipe = 1
tipe tile didefinisikan sendiri oleh
programmer, biasanya menggambarkan jenis
tile pada dunia, misal tanah, air, tanah
gersang, dsb. yang dapat digunakan untuk
menetukan peletakan objek
Bebas & Waypoint – Struktur Data
• Struktur data untuk peta bebas atau dengan waypoint
tetap harus terbagi menjadi struktur data area/waypoint
dan struktur data objek
• Struktur data area harus memuat posisi relatif area (nama
area), dan atribut-atribut yang dibutuhkan untuk mencakup
luasan area. Misalnya area berbentuk persegi, maka ada
dua titik yang harus dimuat sebagai pembatas persegi
tersebut. Jika lingkaran maka harus memuat titik pusat dan
radius (jari-jari). Boleh juga ditambahkan atribut tipe area.
• Struktur data waypoint harus memuat dua hal, yaitu posisi
relatif waypoint (nama waypoint), dan posisi eksak
waypoint.
• Struktur data objek menyesuaikan
Struktur Data Area
• area[n]
struktur data posisi relatif area/nama area
• area[n].x1
area[n].y1
area[n].x2
area[n].y2
struktur data posisi eksak area dalam bentuk
koordinat kartesian layar dua dimensi
cek overlapping area bisa menggunakan cek di
dalam atau di luar clipping window pada minggu
lalu
Struktur Data Area
• Alternatif untuk lingkaran:
area[n].x1
area[n].y1
area[n].radius
• Karena dunia gerak bebas, maka utamanya tipe data objek hanya
memuat koordinat kartesian layar dua dimensi dari titik pusat objek
ybs. Tetapi boleh pula ditambahkan nama areanya untuk
kepentingan status objek
objek[a].x
objek[a].y
objek[a].area = n
//tidak wajib
• Hit test dilakukan dengan metode clipping window antara area
sebagai windownya terhadap titik pusat objek. Jika ingin lebih
akurat dapat ditambah dengan hit-test antar bounding region
(box/circle)
Struktur Data Waypoint/Point
• waypoint[n]
struktur data posisi relatif waypoint/nama area
• area[n].x1
area[n].y1
area[n].radius
struktur data posisi eksak waypoint dalam bentuk
koordinat kartesian layar dua dimensi
radius diperlukan karena gerak objek jarang yang
dapat digerakkan tepat ke koordinat waypoint
cek overlapping area bisa menggunakan cek
radius/hit-test antara dua lingkaran, untuk
menghindari objek wira-wiri
Struktur Data Waypoint/Point
• Waypoint juga menganut gerak bebas, maka utamanya
tipe data objek hanya memuat koordinat kartesian
layar dua dimensi dari titik pusat objek ybs. Tetapi
boleh pula ditambahkan nama waypoint untuk
kepentingan status objek
objek[a].x
objek[a].y
objek[a].waypoint = n
//tidak wajib
• Hit test dilakukan dengan metode clipping window
antara area sebagai windownya terhadap titik pusat
objek. Jika ingin lebih akurat dapat ditambah dengan
hit-test antar bounding region (box/circle)
Objek wira-wiri
• Fenomena tak diinginkan yang seringkali muncul
dalam games
• Disebabkan oleh adanya fungsi penarikan sebuah
objek ke dalam daerah/ke titik pusat sebuah
waypoint/point tertentu ketika titik pusat objek
sudah masuk ke dalam radius waypoint/point
tersebut fungsi ini tidak selalu ada
• Terjadi jika ada dua buah waypoint yang terletak
terlalu dekat
Objek wira-wiri
for (m=0, m=max_objects-1, m++){
for (n=0, n=max_waypoint-1, n++){
if(distance(object[m])<radius(waypoint[n])){
while(object[m].x != waypoint[n].x &&
object[m].y != waypoint[n].y){
//move object[m].x closer to waypoint[n].y step 1px;
//move object[m].y closer to waypoint[n].y step 1px;
}
}
}
}
Last Info
• Sudah ada bocoran dari panitia ITComFest bahwa
lomba game akan menggunakan penyisihan dan dari
yang lolos penyisihan akan ditarungkan untuk
mendapatkan juara 1, 2, dan 3; maka
• Tugas game yang disubmit, akan dibagi menjadi dua
saja, yang masuk kualifikasi dan yang juara.
• Formulasi reward akan saya umumkan setelah ada
perumusan juara yang pasti dari panitia.
Download