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, MoveBymesafe / 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 MoveBybitiş 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
Entityhem a hem de PositionComponentbirMoveByComponent
MoveBySystembu bileşenlerin her ikisine de sahip olan bir varlığı arar MoveByComponentve PositionComponent. Öğesine timeulaşı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, MoveByComponentyukarıdaki ile aynı
MoveByCollectionComponentMoveByComponents dizisi içeren
MoveByCollectionSystema PositionComponentve a içeren bir varlığı arar MoveByCollectionComponent, MoveByComponentiç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 secondsve move x by -10 in 2 secondsvarlık kıpırdamadan kalkar mısın?
MoveByiş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ı.