Saya membuat sistem objek game berbasis komponen . Beberapa tips:
GameObjecthanyalah daftarComponents.- Ada
GameSubsystems. Misalnya, rendering, fisika, dll. MasingGameSubsystem- masing berisi pointer ke beberapaComponents.GameSubsystemadalah abstraksi yang sangat kuat dan fleksibel: ia mewakili setiap irisan (atau aspek) dari dunia game.
Ada kebutuhan dalam mekanisme mendaftar Componentsmasuk GameSubsystems(ketika GameObjectdibuat dan disusun). Ada 4 pendekatan :
- 1: Pola rantai tanggung jawab . Setiap
Componentditawarkan kepada setiap orangGameSubsystem.GameSubsystemmembuat keputusanComponentsuntuk mendaftar (dan bagaimana mengaturnya). Misalnya, GameSubsystemRender dapat mendaftarkan Komponen yang Dapat Diurai.
pro. Componentstidak tahu apa-apa tentang bagaimana mereka digunakan. Kopling rendah. A. Kita dapat menambahkan yang baru GameSubsystem. Sebagai contoh, mari kita tambahkan GameSubsystemTitles yang mendaftarkan semua ComponentTitle dan menjamin bahwa setiap judul adalah unik dan menyediakan antarmuka untuk menanyakan objek berdasarkan judul. Tentu saja, ComponentTitle tidak boleh ditulis ulang atau diwariskan dalam kasus ini. B. Kita dapat mengatur kembali yang sudah ada GameSubsystems. Misalnya, GameSubsystemAudio, GameSubsystemRender, GameSubsystemParticleEmmiter dapat digabungkan ke dalam GameSubsystemSpatial (untuk menempatkan semua audio, emmiter, render Componentsdalam hierarki yang sama dan gunakan transformasi relatif orangtua).
menipu. Pemeriksaan setiap-untuk-setiap. Sangat tidak efisien.
menipu. Subsystemstahu tentang Components.
- 2: Setiap
Subsystempencarian untukComponentsjenis tertentu.
pro. Performa yang lebih baik daripada di Approach 1.
menipu. Subsystemsmasih tahu tentang Components.
- 3:
Componentmendaftar sendiriGameSubsystem(s). Kita tahu pada saat kompilasi bahwa ada GameSubsystemRenderer, jadi mari kita ComponentImageRender akan memanggil sesuatu seperti GameSubsystemRenderer :: register (ComponentRenderBase *).
pro. Performa. Tidak ada pemeriksaan yang tidak perlu seperti pada Approach 1.
menipu. Componentsburuk ditambah dengan GameSubsystems.
- 4: Pola mediator .
GameState(yang berisiGameSubsystems) dapat mengimplementasikan registerComponent (Komponen *).
pro. Componentsdan GameSubystemstidak tahu apa-apa tentang satu sama lain.
menipu. Dalam C ++ akan terlihat seperti typeid-switch jelek dan lambat.
Pertanyaan:
Pendekatan mana yang lebih baik dan sebagian besar digunakan dalam desain berbasis komponen? Apa Kata Praktek? Ada saran tentang implementasi Approach 4?
Terima kasih.
Componentsdi GameObjectsluar ruang lingkup pertanyaan saya. Baca artikel tentang pendekatan berbasis komponen atau ajukan pertanyaan Anda sendiri di situs ini jika Anda tertarik. Apa yang Anda pikirkan GameSubsystembenar-benar salah.