Sono abbastanza nuovo all'idea dei sistemi di entità, avendo letto un sacco di cose (utilmente, questo fantastico blog e questa risposta ).
Anche se ho qualche problema a capire come qualcosa di semplice come riuscire a manipolare la posizione di un oggetto da un numero indefinito di fonti.
Cioè, ho la mia entità, che ha un componente di posizione. Poi ho qualche evento nel gioco che dice a questa entità di muoversi di una data distanza, in un dato tempo.
Questi eventi possono accadere in qualsiasi momento e avranno valori diversi per posizione e tempo. Il risultato è che sarebbero stati composti insieme.
In una soluzione OO tradizionale, avrei una sorta di MoveByclasse, che contiene la distanza / tempo, e un array di quelli all'interno della mia classe di oggetti di gioco. Ogni fotogramma, scorrerei attraverso tutti MoveBye lo applicherei alla posizione. Se a MoveByha raggiunto la fine, rimuoverlo dall'array.
Con il sistema di entità, sono un po 'confuso su come dovrei replicare questo tipo di comportamento.
Se ce ne fosse solo uno alla volta, invece di essere in grado di combinarli insieme, sarebbe abbastanza semplice (credo) e assomiglierebbe a questo:
PositionComponent contenente x, y
MoveByComponent contenente x, y, time
Entityche ha sia a PositionComponentche aMoveByComponent
MoveBySystemche cerca un'entità con entrambi questi componenti e aggiunge il valore di MoveByComponenta PositionComponent. Quando timeviene raggiunto, rimuove il componente da quell'entità.
Sono un po 'confuso su come farei la stessa cosa con molte mosse.
I miei pensieri iniziali sono che avrei:
PositionComponent, MoveByComponentcome sopra
MoveByCollectionComponentche contiene una matrice di MoveByComponents
MoveByCollectionSystemche cerca un'entità con a PositionComponente a MoveByCollectionComponent, che scorre attraverso la MoveByComponents al suo interno, applicando / rimuovendo secondo necessità.
Immagino che questo sia un problema più generale, avere molti componenti uguali e volere che un sistema corrispondente agisca su ciascuno di essi. Le mie entità contengono i loro componenti all'interno di un hash di tipo componente -> componente, quindi rigorosamente hanno solo 1 componente di un tipo particolare per entità.
È questo il modo giusto di guardarlo?
Un'entità dovrebbe sempre avere un solo componente di un determinato tipo in ogni momento?
move x by 10 in 2 secondse move x by -10 in 2 secondsl'entità rimarrebbe perfettamente immobile?
MoveByfunzionalità fosse una specie di velocità? Sembra che tu sia sulla buona strada. Per la tua seconda domanda, ci sono molte diverse implementazioni di sistemi entità / componenti. Quello descritto nella mia risposta che hai collegato avrebbe solo un componente di un determinato tipo.