Oyun mimarisi hakkında bir sorum vardı: Farklı bileşenlerin birbirleriyle iletişim kurmasının en iyi yolu nedir?
Bu soruyu milyonlarca kez sorduğum için gerçekten özür dilerim, ancak tam olarak aradığım türden bir bilgi bulamıyorum.
Sıfırdan bir oyun kurmaya çalışıyordum (eğer önemliyse C ++) ve ilham kaynağı olan bazı açık kaynaklı yazılımları (Super Maryo Chronicles, OpenTTD ve diğerleri) gözlemledim. Bu oyun tasarımlarının birçoğunun (her yerde kuyruk oluşturma, işletme yöneticileri, video yöneticileri ve benzeri şeyler için) küresel örnekleri ve / veya tekilleri kullandığını fark ettim. Global örneklerden ve tekilliklerden kaçınmaya ve mümkün olduğunca gevşek bir şekilde birleştirilmiş bir motor oluşturmaya çalışıyorum, ancak etkili tasarımdaki deneyimsizliğime borçlu olduğum bazı engellere çarpıyorum. (Bu proje için motivasyonun bir kısmı buna değiniyor :))
GameCore
Diğer projelerde gördüğüm dünyaya benzer üyelere sahip bir ana nesneye sahip olduğum bir tasarım yaptım (yani, bir giriş yöneticisi, video yöneticisi, GameStage
tüm varlıkları ve oyun oynamayı kontrol eden bir nesne var) şu anda hangi aşamada yüklü olursa olsun vb. Sorun şu ki, GameCore
nesnede her şey merkezileştiği için, farklı bileşenlerin birbirleriyle iletişim kurması için kolay bir yolum yok.
Örneğin, Super Maryo Chronicles'a bakıldığında, örneğin, oyunun bir bileşeni başka bir bileşenle iletişim kurmaya ihtiyaç duyduğunda (yani bir düşman nesnesi kendini oluşturma aşamasında çizilecek işleme sırasına eklemek ister), sadece genel örnek.
Benim için oyun nesnelerimin ilgili bilgiyi GameCore
nesneye geri göndermesini sağlamalıyım , böylece GameCore
nesne bu bilgiyi ihtiyaç duyduğu sistemin diğer bileşenlerine aktarabilir (örneğin: yukarıdaki durum için her düşman nesnesi) oluşturma bilgilerini GameStage
nesneye geri iletir, bu da hepsini toplar ve geri iletir GameCore
, bu da onu dönüşüm için video yöneticisine iletir). Bu, gerçekten korkunç bir tasarım gibi geliyor ve bunun için bir çözüm bulmaya çalışıyordum. Olası tasarımlar üzerine düşüncelerim:
- Global örnekler (Süper Maryo Chronicles, OpenTTD, vb. Tasarımı)
- Sahip
GameCore
tüm nesneler alışveriş içine girdiği bir aracı olarak hedef hareket (mevcut tasarım yukarıda tarif edilmiştir) - Konuşacakları tüm diğer bileşenlere bileşen göstericileri verin (örn. Yukarıdaki Maryo örneğinde, düşman sınıfının konuşması gereken video nesnesinin bir göstergesi olacak)
- Oyunu alt sistemlere ayırma - Örneğin, alt sistemlerindeki nesneler arasındaki
GameCore
iletişimi yürüten nesnede yönetici nesnelerine sahip olma - (Diğer seçenekler? ....)
Yukarıdaki seçenek 4'ü en iyi çözüm olarak hayal ediyorum, ancak bunu tasarlamakta zorlanıyorum ... belki de globals kullanan gördükleri tasarımlar hakkında düşündüm. Mevcut tasarımımda var olan aynı sorunu alıyorum ve her alt sistemde çoğaltıyorum, daha küçük bir ölçekte. Örneğin, GameStage
yukarıda açıklanan nesne biraz buna teşebbüs etmektir, ancak GameCore
nesne hala sürece katılmaktadır.
Burada herhangi bir tasarım önerisi sunan var mı?
Teşekkürler!