Mesin negara tampaknya menyebabkan ketergantungan berbahaya dalam arsitektur berbasis komponen.
Bagaimana, khususnya, komunikasi ditangani antara mesin negara dan komponen yang melakukan perilaku yang terkait dengan negara?
Di mana saya berada:
- Saya baru mengenal arsitektur berbasis komponen.
- Saya membuat permainan pertempuran, meskipun saya pikir itu tidak masalah. Saya membayangkan mesin negara saya digunakan untuk beralih negara seperti "berjongkok", "berlari", "memblokir", dll.
- Saya telah menemukan teknik manajemen negara ini menjadi sistem yang paling alami untuk arsitektur berbasis komponen, tetapi bertentangan dengan teknik yang saya baca tentang: Sistem Komponen Objek Permainan Dinamis untuk Karakter Perilaku yang Dapat Berubah-ubah. Menunjukkan bahwa semua komponen mengaktifkan / menonaktifkan diri mereka sendiri dengan terus-menerus memeriksa suatu kondisi untuk aktivasi.
- Saya pikir tindakan seperti "berlari" atau "berjalan" masuk akal sebagai keadaan, yang tidak setuju dengan respons yang diterima di sini: /gamedev//a/7934
Saya menemukan ini berguna, tetapi ambigu: Bagaimana menerapkan perilaku dalam arsitektur game berbasis komponen? Ini menyarankan memiliki komponen terpisah yang hanya berisi mesin negara. Tapi, ini membutuhkan semacam kopling antara komponen mesin negara dan hampir semua komponen lainnya. Saya tidak mengerti bagaimana kopling ini harus ditangani. Ini adalah beberapa tebakan:
A. Komponen tergantung pada mesin negara:
Komponen menerima referensi ke komponen mesin negaragetState()
, yang mengembalikan konstanta enumerasi. Komponen memperbarui diri secara teratur dan memeriksa ini sesuai kebutuhan.B. Mesin negara tergantung pada komponen:
Komponen mesin negara menerima referensi ke semua komponen yang dipantau. Itu menanyakangetState()
metode mereka untuk melihat di mana mereka berada.C. Beberapa abstraksi di antara mereka
Gunakan hub acara? Pola perintah?D. Pisahkan objek negara yang komponen referensi
Pola Negara digunakan. Objek keadaan terpisah dibuat, yang mengaktifkan / menonaktifkan satu set komponen. Mesin negara beralih di antara objek negara.Saya melihat komponen sebagai implementasi dari aspek . Mereka melakukan semua yang diperlukan secara internal untuk mewujudkan aspek itu. Sepertinya komponen harus berfungsi sendiri, tanpa bergantung pada komponen lain. Saya tahu beberapa dependensi diperlukan, tetapi mesin negara sepertinya ingin mengontrol semua komponen saya.
sumber
Di perusahaan sebelumnya saya bekerja untuk kami memiliki sistem berbasis komponen dengan AI berbasis negara. Kami memiliki komponen AI yang mengendalikan semua perilaku untuk objek / unit itu. Ketika AI aktif, seperti mengembara, menyerang, dll, ia akan menerima pembaruan setiap frame untuk melakukan logika apa pun yang diperlukan. Ketika AI diam atau tidak bergerak komponen dinonaktifkan dan tidak memperbarui setiap frame. Komponen, sementara dinonaktifkan, masih bisa menerima pesan berbasis peristiwa, sehingga akan menerima pesan untuk sesuatu seperti pemain yang memasuki radius agro, dan bisa meresponsnya dengan mengaktifkan kembali komponen AI sehingga dapat melakukan pembaruan berbasis bingkai.
Komponen AI memiliki sub-komponen, yang dapat dibuat dan dihancurkan dengan cepat, berdasarkan jenis tindakan apa yang dilakukan. Sebagai contoh jika itu berkeliaran itu bisa membuat sub-komponen yang berkeliaran dan memperbarui bahwa setiap frame saat berkeliaran, dan kemudian jika diagrokan ketika berkeliaran itu akan menutup sub-komponen itu dan membuka sub-komponen serangan. Komponen AI harus independen dari semua komponen lain pada suatu objek. Misalnya, kami memiliki komponen input, yang hanya akan menanyakan nilai pergerakan pada unit. Kueri yang dibuatnya adalah sesuatu yang akan ditanggapi oleh objek manusia dan AI. Hal ini memungkinkan komponen AI untuk hanya menetapkan nilai pergerakan pada dirinya sendiri selama hal-hal seperti berkeliaran, bahwa komponen input dapat mengambil, seperti halnya komponen yang dapat dikontrol manusia akan menetapkan nilai yang dapat diambil oleh komponen input.
sumber
Component
, yang berasal dariBaseComponent
, dapat memiliki sejumlahSubComponent
s di atasnya. TheUpdate()
metode dalamBaseComponent
akan memeriksa daftar sub-komponen, dan panggilanUpdate()
pada mereka.Subcomponents
sepenuhnya opsional sehinggaBaseComponent
mungkin tidak memilikinya. Juga, setiap pesan yang masuk ke komponen dialihkan ke subkomponen juga.Agak tidak jelas apa yang Anda maksud dengan komponen karena istilah Anda sangat kabur tanpa contoh nyata. Seringkali entitas game dibangun menggunakan komposisi daripada pewarisan. Dengan demikian, Anda dapat menjadikannya sesuatu yang dapat merusak dengan menambahkan komponen kesehatan ke entitas atau Anda dapat membuatnya hidup dengan menambahkan komponen bernyawa. Orang juga bisa menempatkan AI dalam komponen seperti itu. Akan ada logika pengambilan keputusan dalam komponen AI Anda dan jika Anda khawatir tentang memasangkannya ke banyak kode lain dalam sistem Anda dapat mengumpulkan informasi ke dalam papan tulis yang hanya dapat diakses oleh logika AI. Ada juga masalah ketergantungan pada output sistem AI. Pada dasarnya AI Anda mengendalikan suatu entitas dan kontrol itu membutuhkan antarmuka. Salah satu konsep yang berguna adalah controller atau gamepad. AI Anda dapat mengisi struktur serupa yang akan diisi gamepad pemain (meskipun mungkin memiliki beberapa "tombol" tambahan untuk kemampuan tertentu). Sekarang struktur ini kemudian dapat diteruskan ke komponen animasi Anda yang akan menafsirkannya dan memilih animasi yang sesuai untuk dimainkan. Sub-komponen AI yang berbeda bahkan dapat menulis ke berbagai bidang struktur atau ke bidang yang sama dengan prioritas yang berbeda. Bertujuan dan berjalan misalnya. Sub-komponen AI yang berbeda bahkan dapat menulis ke berbagai bidang struktur atau ke bidang yang sama dengan prioritas yang berbeda. Bertujuan dan berjalan misalnya. Sub-komponen AI yang berbeda bahkan dapat menulis ke berbagai bidang struktur atau ke bidang yang sama dengan prioritas yang berbeda. Bertujuan dan berjalan misalnya.
sumber