TIP 163
Game Engine Topik 4 (Pert 5) Atribut Objek, Gerak Terkoordinasi, Blending Dosen: Aditya Wikan Mahastama
Last Week Review Silakan kumpulkan tugas pemrograman kedua minggu lalu untuk direview bersama ☺ Apa yang anda temukan?
Last Week Addition: Atribut Objek Atribut objek adalah sifat yang dimiliki oleh sebuah objek game, dalam bentuk nilai yang dapat dikuantisasi. Kombinasi beberapa atribut objek dapat tampak seolah-olah sebagai perilaku objek (behavior) saat berinteraksi dengan objek lainnya. Atribut sebuah objek dapat dipengaruhi oleh objek lainnya.
Contoh atribut yang ada sejak game muncul pertama kali adalah life/health (nyawa), kemudian berkembang menjadi atribut-atribut lainnya seperti speed, agility, dsb. Contoh pseudocode struktur data atribut objek dan perubahannya adalah sebagai berikut: int hero.life = 100; int monster.life = 100; if (monster touches hero){ hero.life = hero.life – 1; }
if (hero hits monster){ hit = random (5..10); monster.life = monster.life – hit; }
Untuk game yang kompleks, bisa terdapat juga atribut side dan group yang digunakan sebagai indikator pengelompokan beberapa objek dengan kesamaan pihak atau kesamaan peran.
Gerak Terkoordinasi Gerak terkoordinasi adalah bagaimana objek-objek yang merupakan bagian dari sebuah kelompok besar dapat bergerak secara teratur. Gerak yang teratur ini dapat berupa keseragaman gerak objek dalam suatu saat (disebut juga formasi atau formation). Bentuk lain adalah respon gerak yang muncul sebagai wujud locomotion dari behaviour berkelompok yang telah dibuat (coordinated response).
Formation Formasi mengatur agar gerakan setiap objek dikendalikan dalam bentuk barisan tertentu. Formasi ini pada umumnya mengikuti formasi militer yang sudah ada, gunanya untuk menjaga ritme gerak, menjaga keutuhan kelompok, dan ada pula yang berguna untuk melindungi objek yang lebih lemah. Setiap formasi pasti memiliki pusat formasi yang dapat berupa satu objek tertentu, atau koordinat tengah dari populasi objek terpilih. Koordinat ini dapat dicari
dengan rata-rata, menggunakan klasifikasi, atau clustering. Contoh pseudocode penentuan titik pusat dengan rata-rata posisi objek: total_x = 0; total_y = 0; for(i=0;i
Formation Setiap objek nantinya harus memiliki jarak yang teratur dari pusat formasi. Keteraturan ini dapat dicapai dengan menjaga jarak objek tersebut dengan jarak objek lain dalam formasi. Cara ini sebenarnya digunakan juga oleh manusia dalam mengatur barisan. Contoh pseudocode formasi melingkar dari sejumlah objek: fdistance = 10;
for(i=0;i
fdistance){ seek(groupcenter_x, groupcenter_y); } for(j=0;j
-
Coordinated Response -
Respon terkoordinasi merupakan sebuah behaviour tree di mana objek-objek yang merupakan anggota sebuah kelompok akan memberikan reaksi yang sama (termasuk steering behaviour) saat ada perubahan tertentu pada atribut kelompok atau atribut anggota kelompok. Contoh coordinated response di antaranya: 1. Jika ada anggota kelompok yang diserang, maka mengubah formasi menjadi bertahan (dengan objek paling lemah berada di tengah), mengubah
steering behavior setiap anggota menjadi seek atau pursue lawan, dan object behaviour menjadi mode tempur. 2. Jika ada anggota kelompok yang diserang dan tidak memungkinkan untuk melawan, anggota yang masih dalam jarak aman mencari tempat persembunyian. Coordinated response saat ini tidak hanya berorientasi gerak, tetapi lebih digolongkan pada pengambilan keputusan, sehingga pada ulasan masakini dimasukkan ke dalam game tactics.
Kombinasi Steering Behaviour Adalah kombinasi beberapa steering behaviour pada saat yang sama, sehingga locomotionnya akan berupa satu arah gerak resultan yang merupakan perpaduan dari dua atau lebih steering behaviour. Saat ini hampir semua game menerapkan kombinasi, karena kondisi game world yang kompleks. Contohnya adalah seorang karakter yang akan menuju kota, (seek posisi kota), kemudian diganggu monster, akan mencoba evade sambil mempertahankan seek-nya.
Blending Langsung mengkombinasikan beberapa steering behaviour yang ada, sehingga mendapatkan resultan langsung. Contoh pada pseudocode berikut: Function go_down(){ y = y + 1; } Function go_right(){ x = x + 1; }
//fungsi steering //locomotion
main(){ go_down(); if(enemy_seen){ go_right(); } }
Jika melihat adanya musuh yang menghalangi, maka karakter di atas akan tetap bergerak ke bawah ditambah dengan bergerak ke kanan.
Weighted Blending Mengkombinasikan beberapa steering behaviour yang ada dengan memberikan bobot, sehingga arah gerak resultan dapat disesuaikan dengan keperluannya. Contoh pada pseudocode berikut: Function go_down(){ y = y + 1;
//fungsi steering //locomotion
} Function go_right(int enemydist){ x = x + ((1/enemydist) * 5); }
main(){ go_down(); if(enemy_seen){ enemydist = get_enemy_distance; go_right(enemydist); } }
Jika melihat adanya musuh yang menghalangi, maka karakter di atas akan tetap bergerak ke bawah ditambah dengan bergerak ke kanan sesuai dengan jarak musuh, semakin dekat semakin menghindar.
Priority Blending Mengkombinasikan beberapa steering behaviour yang ada tetapi memberi prioritas arah steering bagi yang lebih penting jika terlalu menyimpang. Contoh pada pseudocode berikut: Function go_down(){ y = y + 1; } Function go_right(){ x = x + 1; }
//fungsi steering //locomotion
main(){ go_down(); if(enemy_seen){ if (x < 10){
//limiting priority
go_right(); } } }
Jika melihat adanya musuh yang menghalangi, maka karakter di atas akan tetap bergerak ke bawah ditambah dengan bergerak ke kanan, tetapi jika
terlalu jauh ke kanan, akan semakin jauh dari target, sehingga pergerakan menghindar dibatasi sampai jarak tertentu saja.
Cooperative Arbitration Melakukan blending dengan memunculkan steering behaviour baru pada kondisi tertentu saja. Contoh: sudah dilakukan pada semua contoh di atas!
Eksperimen Kombinasi Steering (1): 1. Dari game yang terakhir, buatlah agar hero bergerak menuju ke titik tertentu yang sudah ditentukan dengan click mouse (hero seek a coordinate). 2. Jika sepanjang jalan menuju ke titik tersebut hero menemui wall (satu wall saja yang boleh menghalangi jalan), hero otomatis menghindar. Boleh pilih menggunakan blending yang mana (salah satu saja).
Eksperimen Kombinasi Steering (2): 1. Buatlah goblin yang wandering dengan cara: goblin seek ke titik tertentu, kemudian setiap beberapa milidetik, titik tersebut berubah secara acak. Jika goblin melihat hero dalam jarak pandang minimum, goblin memburu hero. Jika hero terhalang wall, goblin tidak dapat melihat (kembali wandering). 2. Dari game yang terakhir, buatlah agar hero bergerak menuju ke titik tertentu yang sudah ditentukan dengan click mouse (hero seek a coordinate).
3. Jika sepanjang jalan menuju ke titik tersebut hero menemui goblin, hero otomatis mencari tempat persembunyian (wall).