Saya cukup baru dalam pengembangan game (tetapi tidak untuk pemrograman) dan saya mencoba mencari tahu apa yang akan menjadi cara terbaik untuk menangani komunikasi antar-dunia. Maksud saya adalah ini:
Saya telah membaca tentang sistem komponen entitas (ECS) dan bagaimana orang menyarankan menggunakan dunia / spasi yang berbeda ( http://gamedevelopment.tutsplus.com/tutorials/spaces-useful-game-object-containers--gamedev-14091 ) untuk subbagian dari game. Misalnya HUD, inventaris atau pertempuran / pergerakan masing-masing mendapatkan dunia / ruang yang terpisah (karena mereka memiliki grafik dan logika yang berbeda.
Namun, saya bertanya-tanya bagaimana inventaris, atau HUD tahu tentang kesehatan pemain ketika kesehatan ditangani oleh ruang / dunia yang berbeda, misalnya ketika dalam pertempuran?
Ini juga berlaku untuk perkembangan game secara umum, misalnya dialog dengan NPC (dialog akan menjadi ruang terpisah karena itu adalah layar popup) tetapi bagaimana Anda akan menyampaikan pilihan yang dibuat dalam (atau keadaan) dialog ke ruang / dunia lain . Atau pada dasarnya semua jenis acara lain yang memengaruhi perkembangan game di berbagai ruang / dunia (kesehatan, mana, pencarian, dialog, pertarungan, inventaris, hud, dll.)
Bagaimana seseorang menangani desain seperti ini? Apakah perlu objek tunggal (dalam implementasi) yang menampung semua jenis informasi ini? Itu akan aneh karena dengan demikian components
kebutuhan untuk menyampaikan setiap perubahan pada objek tunggal ini yang terasa seperti melakukan hal-hal dua kali (bertentangan dengan KERING utama pemrograman) ...
Saya agak bingung di sini dalam hal desain, ada petunjuk?
--- EDIT ---
Jadi saya sudah membaca beberapa posting lain yang disarankan oleh komentar dan mendapat ide umum tentang kemungkinan, namun masing-masing dari mereka tampaknya memiliki satu kelemahan utama yang membuat mereka tidak benar. Sangat mungkin bahwa saya mengawasi detail yang akan menyelesaikan kelemahan ini, jadi silakan koreksi saya. Saya akan mencoba memberikan ikhtisar serta beberapa jawaban untuk beberapa pertanyaan.
Saya melihat tiga opsi utama untuk 'berbagi' data antar ruang. Meskipun sebagian besar posting adalah tentang berbagi data antar sistem, saya merasa hal yang sama dapat diterapkan untuk berbagi data antar sistem.
1. Permintaan
Contoh : Jika dunia HUD perlu mengetahui kesehatan pemain saat ini, ia dapat menanyakan dunia lain dan menanyakan kesehatan saat ini.
Kelemahan : Dunia perlu tahu tentang satu sama lain yang merupakan masalah ketergantungan utama dan bertentangan dengan decoupling.
2: Pesan langsung (sinkronisasi dan asinkron)
Contoh : Jika selama pertempuran kesehatan seorang pemain berubah, ia dapat mengirim pesan (sinkronisasi dan asinkron, apa pun yang diperlukan) ke dunia lain yang perlu tahu tentang perubahan ini.
Kelemahan : Masih masalah decoupling: dunia perlu tahu tentang satu sama lain.
3: Perpesanan tidak langsung (sinkronisasi dan asinkron) <- opsi terbaik
Contoh : Jika selama pertempuran kesehatan seorang pemain berubah, ia dapat mengirim pesan (sinkronisasi dan asinkron, apa pun yang diperlukan) ke hub pesan umum. Dunia / sistem lain yang perlu tahu tentang perubahan ini berlangganan saluran pesan tertentu dan membaca pesan.
Terbalik : Dipisahkan sepenuhnya, mudah dikelola dan diperpanjang.
Kekurangan / tidak jelas : Kapan saluran pesan mengetahui bahwa pesan-pesan perlu dihapus? Atau mungkin sistem yang berlangganan tanda (hanya untuk dirinya sendiri) pesan sebagai sudah dibaca dan menunggu pesan baru -> messagebox menjadi sangat besar setelah beberapa saat. Bagaimana dunia / sistem menangani ketertiban? Misalnya selama bingkai: jika HUD sudah melakukan polling pesan kesehatan dan setelah itu kesehatan berubah, frame berikutnya HUD akan diperbarui. Untuk beberapa aplikasi ini mungkin bukan cara yang benar.
T: Objek game tunggal dapat ada di beberapa ruang
Saya menggunakan kerangka kerja Artemis ECS yang dilengkapi dengan ruang built-in (disebut dunia). Setiap entitas (dan dengannya, data dalam bentuk komponen) dibuat di dunia dan karenanya tidak dapat dibagi di antara dunia.