Varlık sistemleri fikrinde oldukça yeniyim, bir sürü şey okudum (en faydalısı, bu harika blog ve bu cevap ).
Gerçi, bir nesnenin konumunu tanımsız sayıda kaynakla manipüle edebilmek kadar basit bir şeyi anlamakta biraz zorluk çekiyorum.
Yani, pozisyon bileşenine sahip varlığım var. Daha sonra oyunda bu varlığa belirli bir mesafeyi belirli bir zamanda hareket ettirmesini söyleyen bir olay var.
Bu olaylar herhangi bir zamanda olabilir ve konum ve zaman için farklı değerlere sahip olacaktır. Sonuç, bir araya getirilmeleri.
Geleneksel bir OO çözümünde, MoveBy
mesafe / zamanı içeren bir çeşit sınıfım ve oyun nesnesi sınıfımın içinde yer alan bir dizi var. Her bir kareyi, tümüyle yineleyip MoveBy
, pozisyona uygularım. A MoveBy
bitiş zamanına ulaştıysa, diziden kaldırın.
Varlık sistemi ile, bu tür davranışları nasıl tekrarlamam gerektiği konusunda biraz kafam karıştı.
Bunlardan sadece bir tanesi olsaydı, onları bir araya getirebilmek yerine, oldukça basit olurdu (inanıyorum) ve şöyle bir şey olurdu:
PositionComponent
kapsamak x, y
MoveByComponent
kapsamak x, y, time
Entity
hem a hem de PositionComponent
birMoveByComponent
MoveBySystem
bu bileşenlerin her ikisine de sahip olan bir varlığı arar MoveByComponent
ve PositionComponent
. Öğesine time
ulaşıldığında, bileşeni bu varlıktan kaldırır.
Aynı şeyi birçok hamle ile nasıl yapacağım konusunda biraz kafam karıştı.
İlk düşüncelerim:
PositionComponent
, MoveByComponent
yukarıdaki ile aynı
MoveByCollectionComponent
MoveByComponent
s dizisi içeren
MoveByCollectionSystem
a PositionComponent
ve a içeren bir varlığı arar MoveByCollectionComponent
, MoveByComponent
içindeki s aracılığıyla yinelenir , gerektiğinde uygulanır / kaldırılır.
Sanırım bu, aynı bileşenin birçoğuna sahip olmak ve karşılık gelen bir sistemin her biri üzerinde hareket etmesini istemek için daha genel bir sorundur. Varlıklarım bileşenlerini bileşen türü -> bileşeninin bir karması içinde içerir, bu nedenle varlık başına belirli bir türde yalnızca 1 bileşen bulunur.
Buna bakmanın doğru yolu bu mu?
Bir işletmenin her zaman belirli bir türde tek bir bileşeni olmalı mıdır?
move x by 10 in 2 seconds
ve move x by -10 in 2 seconds
varlık kıpırdamadan kalkar mısın?
MoveBy
işlevsellik gibi geliyor sadece bir hız? Doğru yoldaymış gibi geliyor. İkinci sorunuz için, varlık / bileşen sistemlerinin birçok farklı uygulaması vardır. Bağladığım cevabımda anlatılan cevap, verilen türde sadece bir bileşene sahip olacaktı.