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 :))
GameCoreDiğ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, GameStagetüm varlıkları ve oyun oynamayı kontrol eden bir nesne var) şu anda hangi aşamada yüklü olursa olsun vb. Sorun şu ki, GameCorenesnede 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 GameCorenesneye geri göndermesini sağlamalıyım , böylece GameCorenesne 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 GameStagenesneye 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
GameCoretü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
GameCoreiletiş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, GameStageyukarıda açıklanan nesne biraz buna teşebbüs etmektir, ancak GameCorenesne hala sürece katılmaktadır.
Burada herhangi bir tasarım önerisi sunan var mı?
Teşekkürler!