Saya mencoba untuk mendapatkan kepala saya di sekitar desain entitas berbasis komponen.
Langkah pertama saya adalah membuat berbagai komponen yang bisa ditambahkan ke objek. Untuk setiap jenis komponen saya memiliki manajer, yang akan memanggil fungsi pembaruan setiap komponen, melewati hal-hal seperti keadaan keyboard dll sesuai kebutuhan.
Hal berikutnya yang saya lakukan adalah menghapus objek, dan hanya memiliki setiap komponen dengan ID. Jadi suatu objek didefinisikan oleh komponen yang memiliki Id yang sama.
Sekarang, saya berpikir bahwa saya tidak memerlukan manajer untuk semua komponen saya, misalnya saya punya SizeComponent
, yang hanya memiliki Size
properti). Akibatnya SizeComponent
tidak ada metode pembaruan, dan metode pembaruan manajer tidak melakukan apa pun.
Pikiran pertama saya adalah memiliki ObjectProperty
kelas yang dapat ditanyakan oleh komponen, alih-alih menjadikannya sebagai properti komponen. Jadi suatu objek akan memiliki sejumlah ObjectProperty
dan ObjectComponent
. Komponen akan memiliki logika pembaruan yang menanyakan objek untuk properti. Manajer akan mengelola memanggil metode pembaruan komponen.
Ini kelihatannya seperti over-engineering bagi saya, tetapi saya tidak berpikir saya bisa menyingkirkan komponen, karena saya memerlukan cara bagi para manajer untuk mengetahui objek apa yang perlu logika komponen apa yang harus dijalankan (jika tidak saya hanya akan menghapus komponen sepenuhnya dan dorong logikanya pembaruan ke manajer).
- Apakah ini (memiliki
ObjectProperty
,ObjectComponent
danComponentManager
kelas) over-engineering? - Apa yang akan menjadi alternatif yang baik?
RenderingComponent
dan a PhysicsComponent
. Apakah saya terlalu memikirkan keputusan untuk meletakkan properti itu? Haruskah saya hanya memasukkannya ke dalam salah satu, lalu minta objek lain untuk komponen yang memiliki properti yang dibutuhkan?
PhysicalStateInstance
(satu per objek) di samping GravityPhysicsShared
(satu per game); namun saya tergoda untuk mengatakan ini merambah ke ranah euforia arsitek, jangan membuat diri Anda berlubang (persis seperti yang saya lakukan dengan sistem komponen pertama saya). CIUMAN.
SizeComponent
banyak - Anda dapat mengasumsikan bahwa sebagian besar objek memiliki ukuran - itu hal-hal seperti rendering, AI dan fisika di mana model komponen digunakan; Ukuran akan selalu berperilaku sama - sehingga Anda dapat membagikan kode itu.