Ich bin ziemlich neu in der Idee von Entitätssystemen, nachdem ich eine Menge Dinge gelesen habe (am nützlichsten dieser großartige Blog und diese Antwort ).
Obwohl ich ein wenig Probleme habe zu verstehen, wie einfach es ist, die Position eines Objekts durch eine undefinierte Anzahl von Quellen zu manipulieren.
Das heißt, ich habe meine Entität, die eine Positionskomponente hat. Ich habe dann ein Ereignis im Spiel, das dieser Entität sagt, dass sie sich in einer bestimmten Zeit um eine bestimmte Strecke bewegen soll.
Diese Ereignisse können jederzeit auftreten und haben unterschiedliche Werte für Position und Zeit. Das Ergebnis ist, dass sie zusammengesetzt würden.
In einer herkömmlichen OO-Lösung hätte ich eine Art MoveByKlasse, die die Entfernung / Zeit und eine Reihe von Klassen in meiner Spielobjektklasse enthält. Bei jedem Frame würde ich alle durchlaufen MoveByund auf die Position anwenden. Wenn a MoveByseine Endzeit erreicht hat, entfernen Sie es aus dem Array.
Mit dem Entitätssystem bin ich ein wenig verwirrt darüber, wie ich diese Art von Verhalten replizieren soll.
Wenn es nur eine davon zu einer Zeit gäbe, anstatt sie zusammenzusetzen, wäre es ziemlich einfach (glaube ich) und würde ungefähr so aussehen:
PositionComponent enthält x, y
MoveByComponent enthält x, y, time
Entitywelches sowohl a PositionComponentals auch a hatMoveByComponent
MoveBySystemDas sucht nach einer Entität mit diesen beiden Komponenten und addiert den Wert von MoveByComponentzu PositionComponent. Wenn das timeerreicht ist, wird die Komponente aus dieser Entität entfernt.
Ich bin ein bisschen verwirrt darüber, wie ich das gleiche mit vielen Moves machen würde.
Meine ersten Gedanken sind, dass ich hätte:
PositionComponent, MoveByComponentDie gleichen wie oben
MoveByCollectionComponentwelches ein Array von MoveByComponents enthält
MoveByCollectionSystemdas sucht nach einer Entität mit a PositionComponentund a MoveByCollectionComponent, die durch das MoveByComponents darin iteriert und nach Bedarf anwendet / entfernt.
Ich denke, dies ist ein allgemeineres Problem, viele der gleichen Komponenten zu haben und zu wollen, dass ein entsprechendes System auf jede einzelne einwirkt. Meine Entitäten enthalten ihre Komponenten in einem Hash vom Komponententyp -> Komponente, haben also streng genommen nur 1 Komponente eines bestimmten Typs pro Entität.
Ist das der richtige Weg, dies zu betrachten?
Sollte eine Entität immer nur eine Komponente eines bestimmten Typs haben?
move x by 10 in 2 secondsund move x by -10 in 2 secondsdas Unternehmen vollkommen still stehen würde?
MoveByFunktionalität nur eine Geschwindigkeit? Es hört sich so an, als wären Sie auf dem richtigen Weg. Für Ihre zweite Frage gibt es viele verschiedene Implementierungen von Entitäts- / Komponentensystemen. Die in meiner Antwort, die Sie verlinkt haben, beschriebene Beschreibung enthält nur eine Komponente eines bestimmten Typs.