Saya memulai proyek game 'yang tepat' pertama saya, dan saya pasti akan berusaha keras untuk memutuskan bagaimana komponen-komponen game dalam XNA harus berkomunikasi.
Dari acara pemrograman GUI sebelumnya (Jawa), penangan dan pendengar tampak seperti jalan ke depan. Jadi saya akan memiliki semacam bus acara yang menerima pendaftaran acara dan kelas yang berlangganan acara-acara tersebut, dengan penangan untuk menghadapinya. Misalnya (kodesemu):
class SpriteManager
Update(){
if(player.collidesWith(enemy)
// create new 'PlayerCollisionEvent'
}
class HUDManager
onPlayerCollisionEvent(){
// Update the HUD (reduce lives etc)
}
Namun, saya tidak yakin tentang pengaturan kode (dalam C #) yang akan diperlukan untuk menyelesaikan ini sepenuhnya. Apa yang melacak peristiwa (semacam bus?), Dan bagaimana strukturnya?
Tampaknya juga ada banyak yang disebutkan tentang Layanan Game, di mana Anda dapat mendaftarkan GameComponent di kelas Game.cs utama Anda, lalu mengambilnya dari mana saja dalam kode Anda yang memiliki referensi ke objek 'Game' utama. Saya sudah mencoba ini dengan objek SpriteBatch saya dan sepertinya sangat mudah .. namun, saya tidak bisa melihat ini sefleksibel model acara.
Ambil contoh ketika musuh mati. Kami ingin memperbarui skor permainan. Dengan menggunakan layanan, saya bisa mendapatkan referensi ke objek StateManager saya yang dibuat di Game1 dan ditambahkan sebagai layanan, lalu atur 'skor' ke nilai baru. Saya akan berpikir acara 'onEnemyDeath', yang dapat ditangani secara berbeda oleh banyak kelas, tetapi diprakarsai oleh 1 baris kode di bagian 'deteksi kematian musuh' yang relevan, akan lebih baik daripada secara individual casting setiap GameComponent yang diperlukan kemudian memanggil apa pun metode diperlukan.
Atau apakah ini strategi yang lebih rendah daripada yang lain?
Saya menyadari ini adalah sebagian dari pengetahuan C # saya yang buruk seperti halnya paradigma komunikasi permainan, tetapi saya benar-benar ingin memperbaiki hal mendasar ini.
Memperbarui
Setelah melihat Layanan lebih detail saya kurang yakin - itu pada dasarnya melewati variabel global sekitar (dari apa yang saya mengerti).
Perbarui 2
Setelah melihat tutorial dasar tentang penanganan event dan pengujian kode sampel ini, sepertinya acara akan menjadi pilihan logis untuk apa yang saya diskusikan. Tapi saya tidak bisa banyak menggunakannya dalam sampel yang saya lihat. Adakah alasan yang jelas mengapa seseorang tidak melakukannya?