Saya kira saya sudah memutuskan bahwa saya sangat suka event handler. Saya mungkin menderita sedikit dari kelumpuhan analisis, tetapi saya khawatir tentang membuat desain saya berat atau mengalami konsekuensi tak terduga lainnya terhadap keputusan desain saya.
Mesin permainan saya saat ini melakukan rendering berbasis sprite dasar dengan kamera overhead panning. Desain saya terlihat sedikit seperti ini:
SceneHandler
Berisi daftar kelas yang mengimplementasikan antarmuka SceneListener (saat ini hanya Sprite). Memanggil render () sekali per centang, dan mengirimkan onCameraUpdate (); pesan ke SceneListeners.
InputHandler
Polling input sekali per centang, dan mengirim pesan "onKeyPressed" sederhana ke InputListeners. Saya memiliki Camera InputListener yang memegang instance SceneHandler dan memicu updateCamera (); peristiwa berdasarkan apa inputnya.
AgentHandler
Panggilan tindakan default pada Agen apa pun (AI) sekali per centang, dan akan memeriksa tumpukan untuk setiap peristiwa baru yang terdaftar, mengirimkannya ke Agen tertentu sesuai kebutuhan.
Jadi saya memiliki objek sprite dasar yang dapat bergerak di sekitar pemandangan dan menggunakan perilaku kemudi yang belum sempurna untuk bepergian. Saya sudah menemukan deteksi tabrakan, dan di sinilah saya tidak yakin arah desain saya berjalan dengan baik. Apakah praktik yang baik untuk memiliki banyak, penangan event kecil? Saya membayangkan pergi seperti saya bahwa saya harus menerapkan semacam CollisionHandler.
Apakah saya akan lebih baik dengan EntityHandler yang lebih terkonsolidasi yang menangani AI, pembaruan tabrakan, dan interaksi entitas lainnya dalam satu kelas? Atau apakah saya akan baik-baik saja hanya menerapkan banyak subsistem penanganan acara yang berbeda yang menyampaikan pesan satu sama lain berdasarkan jenis acara apa? Haruskah saya menulis EntityHandler yang hanya bertanggung jawab untuk mengoordinasikan semua penangan sub event ini?
Saya menyadari dalam beberapa kasus, seperti InputHandler dan SceneHandler saya, itu adalah jenis peristiwa yang sangat spesifik. Sebagian besar kode permainan saya tidak akan peduli tentang input, dan sebagian besar tidak akan peduli tentang pembaruan yang terjadi murni dalam rendering adegan. Jadi saya merasa isolasi saya terhadap sistem-sistem itu dibenarkan. Namun, saya mengajukan pertanyaan ini secara khusus mendekati peristiwa jenis logika game.
sumber
Dalam sebagian besar situasi, menggunakan peristiwa di atas opsi lain sering kali dapat meningkatkan kecepatan dan desentralisasi. Saya pikir jika Anda dapat menggunakan banyak acara, Anda harus melakukannya.
sumber