Saya membuat sistem objek game berbasis komponen . Beberapa tips:
GameObject
hanyalah daftarComponents
.- Ada
GameSubsystems
. Misalnya, rendering, fisika, dll. MasingGameSubsystem
- masing berisi pointer ke beberapaComponents
.GameSubsystem
adalah abstraksi yang sangat kuat dan fleksibel: ia mewakili setiap irisan (atau aspek) dari dunia game.
Ada kebutuhan dalam mekanisme mendaftar Components
masuk GameSubsystems
(ketika GameObject
dibuat dan disusun). Ada 4 pendekatan :
- 1: Pola rantai tanggung jawab . Setiap
Component
ditawarkan kepada setiap orangGameSubsystem
.GameSubsystem
membuat keputusanComponents
untuk mendaftar (dan bagaimana mengaturnya). Misalnya, GameSubsystemRender dapat mendaftarkan Komponen yang Dapat Diurai.
pro. Components
tidak 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 Components
dalam hierarki yang sama dan gunakan transformasi relatif orangtua).
menipu. Pemeriksaan setiap-untuk-setiap. Sangat tidak efisien.
menipu. Subsystems
tahu tentang Components
.
- 2: Setiap
Subsystem
pencarian untukComponents
jenis tertentu.
pro. Performa yang lebih baik daripada di Approach 1
.
menipu. Subsystems
masih tahu tentang Components
.
- 3:
Component
mendaftar 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. Components
buruk ditambah dengan GameSubsystems
.
- 4: Pola mediator .
GameState
(yang berisiGameSubsystems
) dapat mengimplementasikan registerComponent (Komponen *).
pro. Components
dan GameSubystems
tidak 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.
Components
di GameObjects
luar 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 GameSubsystem
benar-benar salah.