Öğrenim amacıyla bileşen tabanlı bir varlık sistemi tasarlamaya çalışıyorum (ve daha sonra bazı oyunlarda kullanıyorum) ve varlık durumlarını güncelleme konusunda bazı sorunlar yaşıyorum.
Bileşenler arasında bağımlılıkları önlemek için Bileşen içinde bir update () yöntemi olmasını istemiyorum.
Şu anda aklımda olan şey, bileşenlerin veri tutması ve sistemlerin bileşenleri güncellemesidir.
Yani, Transform, Hareket, Durum, Animasyon ve Rendering bileşenlerine sahip bazı varlıkları (örn. Oyuncu, düşman1, düşman2) içeren basit bir 2D oyunum varsa, sahip olmam gerektiğini düşünüyorum:
- Tüm Hareket bileşenlerini hareket ettiren ve Durum bileşenlerini güncelleyen bir Hareket Sistemi
- Animasyon bileşenlerini güncelleyen bir RenderSystem (animasyon bileşeninin her durum için bir animasyon (yani bir dizi kare / doku) içermesi ve güncellenmesi, mevcut duruma karşılık gelen animasyonu (örn. Atlama, moving_left, vb.) Seçmesi ve çerçeve indeksinin güncellenmesi). Ardından, RenderSystem, Render bileşenlerini her bir varlığın Animasyonunun geçerli karesine karşılık gelen doku ile günceller ve her şeyi ekranda görüntüler.
Artemis çerçevesi gibi bazı uygulamalar gördüm, ancak bu durumu nasıl çözeceğimizi bilmiyorum:
Diyelim ki oyunumda aşağıdaki varlıklar var. Her varlığın bir dizi durumu ve her bir durum için bir animasyonu vardır:
- oyuncu: "boşta", "moving_right", "atlama"
- enemy1: "moving_up", "moving_down"
- enemy2: "moving_left", "moving_right"
Her bir kurumun mevcut durumunu güncellemek için en kabul edilen yaklaşımlar nelerdir? Aklıma gelen tek şey, her varlık grubu için ayrı sistemlere ve ayrı Durum ve Animasyon bileşenlerine sahip olmaktır, bu yüzden PlayerState, PlayerAnimation, Enemy1State, Enemy1Animation ... PlayerMovementSystem, PlayerRenderingSystem ... ama bunun kötü olduğunu düşünüyorum çözüm ve bileşen tabanlı bir sisteme sahip olma amacını bozar.
Gördüğünüz gibi, burada çok kayboldum, bu yüzden herhangi bir yardımı çok takdir ediyorum.
DÜZENLEME: Bence bu işi yapmayı amaçladığım çözüm şudur:
Statecomponent ve animationcomponent bileşenini tüm varlıklar için kullanılacak kadar genel yaparsınız. İçerdikleri veriler, hangi animasyonların oynatıldığı veya hangi durumların kullanılabilir olduğu gibi şeyleri değiştirmek için değiştirici olacaktır. - Byte56
Şimdi, bu 2 bileşeni yeterince genel olarak nasıl tasarlayacağımı anlamaya çalışıyorum. Her durum için bir UID'ye sahip olabilir (örneğin yürüme, koşma ...) ve animasyonları bu tanımlayıcı tarafından anahtarlanan AnimationComponent'e bir haritaya kaydetmek iyi bir çözüm olabilir mi?
statecomponent
ve animationcomponent
jenerik yeterince tüm varlıklar için kullanılacak. İçerdikleri veriler, hangi animasyonların oynatıldığı veya hangi durumların kullanılabilir olduğu gibi şeyleri değiştirmek için değiştirici olacaktır.