Bileşen tabanlı varlık tasarımına yönelmeye çalışıyorum.
İlk adımım, bir nesneye eklenebilecek çeşitli bileşenler oluşturmaktı. Her bileşen türü için, her bileşenin güncelleme işlevini çağıracak, gerektiği gibi klavye durumu vb.
Yaptığım bir sonraki şey, nesneyi kaldırmak ve her bir bileşeni bir kimliğe sahip olmaktı. Yani bir nesne aynı ID'lere sahip bileşenler tarafından tanımlanır.
Şimdi, tüm bileşenlerim için bir yöneticiye ihtiyacım olmadığını düşünüyorum, örneğin SizeComponent
sadece bir Size
özelliği olan bir var). Sonuç olarak, SizeComponent
güncelleme yöntemi yoktur ve yöneticinin güncelleme yöntemi hiçbir şey yapmaz.
İlk düşüncem, ObjectProperty
bileşenlerin özellikleri olarak kullanmak yerine bileşenlerin sorgulayabileceği bir sınıfa sahip olmaktı. Yani bir nesnenin bir dizi ObjectProperty
ve değeri olacaktır ObjectComponent
. Bileşenler, nesneyi özellikler için sorgulayan güncelleme mantığına sahip olacaktır. Yönetici, bileşenin güncelleme yöntemini çağırmayı yönetir.
Bu bana aşırı mühendislik gibi görünüyor, ama ben bileşenleri kurtulmak sanmıyorum, çünkü yöneticilerin hangi bileşen mantığı çalıştırmak için hangi nesnelerin ihtiyacı olduğunu bilmek için bir yol gerekir (aksi takdirde sadece bileşeni kaldırmak istiyorum tamamen güncelleyin ve güncelleme mantığını yöneticiye aktarın).
- Bu (sahip
ObjectProperty
olmakObjectComponent
veComponentManager
sınıflar) aşırı mühendislik mi? - İyi bir alternatif ne olurdu?
RenderingComponent
ve a tarafından kullanılan bir pozisyon olarak bir nesne PhysicsComponent
. Mülkü nereye koyacağımı düşünmüyor musunuz? Ben sadece ya da sopa, diğer sorgu gerekli özelliği olan bileşen için bir nesne var mı?
PhysicalStateInstance
Bir GravityPhysicsShared
(oyun başına bir) ile birlikte ( nesne başına bir) deneyebilirsiniz ; ancak bunun mimarların öfori alemlerine girmeye başladığını söylemeye cazipim, kendinizi bir deliğe (tam olarak ilk bileşen sistemimle yaptığım gibi) mimar etmeyin. ÖPMEK.
SizeComponent
yapmak aşırıya kaçmış - çoğu nesnenin bir boyutu olduğunu varsayabilirsiniz - bu bileşen modelinin kullanıldığı render, AI ve fizik gibi şeyler; Boyut her zaman aynı şekilde davranacaktır - böylece bu kodu paylaşabilirsiniz.