Je suis assez nouveau dans l'idée des systèmes d'entités, après avoir lu un tas de choses (le plus utile, ce grand blog et cette réponse ).
Bien que j'aie un peu de mal à comprendre comment quelque chose d'aussi simple que de pouvoir manipuler la position d'un objet par un nombre indéfini de sources.
Autrement dit, j'ai mon entité, qui a une composante de position. J'ai alors un événement dans le jeu qui dit à cette entité de se déplacer sur une distance donnée, dans un temps donné.
Ces événements peuvent survenir à tout moment et auront des valeurs différentes pour la position et l'heure. Le résultat est qu'ils seraient combinés ensemble.
Dans une solution OO traditionnelle, j'aurais une sorte de MoveBy
classe, qui contient la distance / temps, et un tableau de ceux à l'intérieur de ma classe d'objets de jeu. Chaque image, je répéterais à travers tout MoveBy
, et l'appliquerais à la position. Si a MoveBy
a atteint son heure de fin, supprimez-le du tableau.
Avec le système d'entités, je suis un peu confus quant à la façon de reproduire ce type de comportement.
S'il n'y en avait qu'un à la fois, au lieu de pouvoir les mélanger ensemble, ce serait assez simple (je crois) et ressembler à ceci:
PositionComponent
contenant x, y
MoveByComponent
contenant x, y, time
Entity
qui a à la fois un PositionComponent
et unMoveByComponent
MoveBySystem
qui recherche une entité avec ces deux composants et ajoute la valeur de MoveByComponent
au PositionComponent
. Lorsque le time
est atteint, il supprime le composant de cette entité.
Je suis un peu confus quant à la façon dont je ferais la même chose avec de nombreux déménagements.
Mes premières pensées sont que j'aurais:
PositionComponent
, MoveByComponent
comme ci-dessus
MoveByCollectionComponent
qui contient un tableau de MoveByComponent
s
MoveByCollectionSystem
qui recherche une entité avec un PositionComponent
et un MoveByCollectionComponent
, itérant à travers le MoveByComponent
s à l'intérieur, en appliquant / supprimant si nécessaire.
Je suppose que c'est un problème plus général, d'avoir beaucoup du même composant, et de vouloir un système correspondant pour agir sur chacun. Mes entités contiennent leurs composants dans un hachage de type composant -> composant, donc strictement 1 seul composant d'un type particulier par entité.
Est-ce la bonne façon de voir les choses?
Une entité ne devrait-elle avoir à tout moment qu'un seul composant d'un type donné?
move x by 10 in 2 seconds
et que move x by -10 in 2 seconds
l'entité resterait parfaitement immobile?
MoveBy
fonctionnalité est une sorte de vitesse? On dirait que vous êtes sur la bonne voie. Pour votre deuxième question, il existe de nombreuses implémentations différentes de systèmes d'entités / composants. Celui décrit dans ma réponse que vous avez lié n'aurait qu'un seul composant d'un type donné.