Saya tidak tahu banyak tentang mesin negara hingga dalam AI atau perilaku permainan lainnya dalam game, kecuali tutorial singkat ini dengan Miner: http://www.ai-junkie.com/architecture/state_driven/tut_state1.html yang berorientasi objek.
Saya tidak benar-benar tahu apakah tutorial ini menggambarkan pola Negara atau tidak, bagaimana menurut Anda?
Saya tidak berbicara tentang hal-hal lain yang lebih berorientasi aritmatika seperti kemudi atau fisika atau pencarian jalur atau tabrakan, melainkan tentang logika game, AI yang dikendalikan oleh negara, dan hal-hal yang melibatkan banyak keadaan simultan dan if
s dan / atau switch
es
Apa pro / kontra dari menggunakan Pola Negara atau pemeriksaan berurutan dari struktur keadaan biasa seperti ini:
struct States
{
bool is_walking, is_running, holds_a_weapon, is_crouch;
int weapon_id, int id_team;
};
void HandleStates (States state)
{
//etc
}
Jawaban:
Saya akan mencoba menjawab ini sebaik mungkin, tetapi ada beberapa "praktik terbaik" yang saya tidak yakin, tetapi saya akan mencoba menjabarkannya sebersih mungkin.
FSM
Pertama, tutorial Miner adalah dari Programming Game AI dengan Contoh oleh Mat Buckland (yang saya sarankan Anda dapatkan sebagai pengantar AI). Dia menggunakan enum untuk setiap negara, BUKAN struct. Dengan struct dalam contoh Anda, Anda memiliki boolean sebagai negara bagian, sehingga Anda dapat memiliki sejumlah ini pada saat yang sama. Ini mungkin mengarah pada perilaku yang Anda inginkan, tetapi lebih sering daripada tidak dengan FSM (Mesin Negara Hingga) itu mengarah pada perilaku yang tidak diinginkan.
Sebagai contoh:
Kedua, itu bukan satu-satunya cara dia menggambarkan keadaan. Cara saya pribadi lebih suka (tergantung pada situasinya) adalah dengan membuat kelas abstrak yang disebut State yang memiliki fungsi Enter (), Exit () dan Update (). Kemudian buat status saya sebagai subclass dari kelas State.
Seperti gambar ini (sebenarnya ada pada halaman 2 tautan itu):
Pola Negara
Menurut pendapat pribadi saya, pola keadaan hanyalah bagian dari desain perangkat lunak di mana perangkat lunak memiliki sejumlah negara. The implementasi adalah ke pengembang. Saya tidak merasa ada perbedaan yang tepat antara menggunakan pernyataan saklar besar atau membuat mesin status lengkap untuk menjalankan semua status Anda seperti yang saya uraikan di atas. Mereka pada dasarnya melakukan hal yang sama. Jadi dalam hal itu, jawaban untuk salah satu pertanyaan Anda adalah ya, saya yakin halaman itu menggambarkan pola keadaan.
Pro kontra
Ada pro dan kontra untuk setiap metode yang Anda gunakan untuk menerapkan desain yang digerakkan oleh negara.
Menggunakan Pernyataan If / Else atau Switch
Pro:
Cons:
Menggunakan mesin keadaan berorientasi objek
Pro:
Cons:
Saya harap itu menjawab semua pertanyaan Anda. Bahkan, saya baru saja membuka salinan AI Pemrograman Game saya dengan Contoh dan Mat tidak menyebutkan bahwa mesin negara dikenal sebagai "pola desain keadaan". Secara pribadi, saya tidak setuju, tetapi masing-masing miliknya sendiri.
Semoga bermanfaat :)
sumber