TIP 163
Game Engine Topik 2 (Pert 3) AI Dalam Game dan Steering Behaviour Dosen: Aditya Wikan Mahastama
Last Week Review Bagaimana dengan contoh game yang diminta untuk dipelajari? Apa yang anda temukan? Adakah kesulitan dalam menambahkan musuh dan membuat tembakan?
Last Week Review Dunia dalam game umumnya memiliki elemen-elemen berikut: 1. Characters 2. Objects Yang mana characters secara definitif (ketika kita melakukan pemrograman) juga dapat dianggap sebagai objects (characters itu sendiri sebenarnya juga objek yang memiliki sifat-sifat khusus karakter), sehingga secara umum dapat disebut game objects
AI Dalam Game Artificial Engine (AI) dalam game menggambarkan interaksi antar game objects. AI dalam game dapat dibagi menjadi: 1. Object Behaviour How objects responded Decision making Behaviour tree/State diagram 2. Steering Behaviour How objects moved Locomotion 3. Game Tactics How objects cleverly solve the goal Pathfinding, Fuzzy, other methods
Object Behaviour
Steering Behaviour
Game Tactics
Steering Behaviour Bagaimana sebuah character mengubah sifat gerak (mulai bergerak, berhenti atau mengubah arah gerak) setelah mengetahui keberadaan game objects yang lain. Steering behaviour terdiri dari sejumlah syarat yang pada umumnya melibatkan jarak minimum dan pertimbangan bobot lainnya (power, area bahaya, dll), disertai keputusan untuk mengubah sifat dan arah pergerakan.
Steering Behaviour Secara sederhana steering behaviour dapat dinyatakan dalam pseudocode berikut: if (distance < threshold){ changeDirection(); }
atau if (distance > threshold){ changeDirection(); }
Syarat, dalam contoh ini adalah jarak minimum atau maksimum, sebagai pemicu perubahan sifat gerak
Steering Behaviour Untuk mengukur jarak dua objek yang akan digunakan sebagai pemicu (trigger) dari sebuah steering behaviour, dapat dipergunakan rumus jarak yang ada: - Euclidean Distance - Manhattan / City-block Distance - Lainnya
Steering Behaviour Steering behaviour dapat dinyatakan sebagai sebuah method atau function tersendiri untuk memudahkan pemanggilan, misal fungsi flee (menjauh). function flee(object, against) returns newDirection{ if (distance(object, against) < threshold){ changeDirectionBackwardAgainst(against); } }
Steering Behaviour Steering behaviour digunakan bersama-sama dengan action (serangkaian aturan / rules untuk memicu sebuah steering behaviour) dan locomotion (perwujudan dari steering behaviour tersebut melalui gerakan objek game) if objectIsSeen(object, against) { newDirection = flee(object, against); changeDirection(object, newDirection); moveForward(object); }
ACTION
STEERING
LOCOMOTION
Steering Behaviour Namun jika tidak ingin menerapkan pemrograman berbasis objek, atau ketika tidak menerapkan arah (direction) sebagai salah satu atribut wajib objek, secara praktik steering sering digabungkan (dicampur adukkan) dengan locomotion. Harus dipahami bahwa sisi praktik dan konseptual tetap harus dipisahkan. Contoh penggabungan dapat dilihat pada dua steering behaviour dasar berikut ini (Seek dan Flee).
Seek Seek (mencari) adalah salah satu steering behaviour yang paling dasar. Jika objek yang dijadikan acuan berada pada jarak tertentu, ubah arah gerak menuju objek tersebut.
Locomotion dapat diwujudkan dengan mengurangi jarak menuju objek acuan tersebut if (distance > threshold){ if (target.x>my.x){ my.x++; if (target.x<my.x){ my.x--; if (target.y>my.y){ my.y++; if (target.y<my.y){ my.y--; }
} } } }
Flee Flee (lari) juga salah satu steering behaviour yang paling dasar. Jika objek yang dijadikan acuan berada pada jarak tertentu, ubah arah gerak menjauhi lokasi objek tersebut.
Locomotion dapat diwujudkan dengan menambah jarak menjauhi objek acuan tersebut if (distance < threshold){ if (target.x>my.x){ my.x--; if (target.x<my.x){ my.x++; if (target.y>my.y){ my.y--; if (target.y<my.y){ my.y++; }
} } } }
Steering Behaviour Selebihnya dapat dilihat pada slide berikut.
PR Next Week: Buatlah dua ekor goblin yang selalu mengejar (seek) terhadap hero, dan dua ekor lainnya yang selalu menjauhinya (flee) pada jarak tertentu (32 piksel dari hero), kemudian berhenti pada jarak aman. Gantilah sprite Goblin yang flee untuk membedakan dari yang seek. Sprite bebas.